鱼C论坛

 找回密码
 立即注册
查看: 2122|回复: 8

[已解决]关于pandas的一点用法

[复制链接]
发表于 2022-6-30 00:59:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
哈咯 各位大神,关于DF的操作突然有点忘记就是我想对一个二维数组比如说x:10 *10 ,还有一个挑选的一维数据,这个数据为一列行数跟二维数组相同,比如说y :10 * 1

我想对这个一维数组进行bull索引 举个简单的例子比如说 y %3 == 0: 这个返回一个bull的 seires我知道。

然后我想对这个返回的bull布尔series里条件为ture的行,在这个例子里就是0 , 3,6,9行的x中 的数据都*2 即x的0369行中每一个原有的值乘2,其他行都保持原值不变,我应该怎么操作?

2022-06-30 00-53-48屏幕截图.png
最佳答案
2022-7-1 20:40:23
Victor0321 发表于 2022-7-1 19:54
不太行。。。

我这样写,报错了,,我想把b里对应者就是a中的行,b中哪个元素是sb ,那a中那一行对应 ...

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(100).reshape((10, 10)))

b =  ["sb","sb","sb","sb","sb","1",'2',"sb","sb","sb"]
index = [b[i] == "sb" for i in range(len(b))]
df.iloc[index, :] = df.iloc[index, :] * 2

print(df)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-30 03:07:06 | 显示全部楼层
提示:用 df.apply(..., axis=1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-30 12:10:04 | 显示全部楼层
阿奇_o 发表于 2022-6-30 03:07
提示:用 df.apply(..., axis=1)

能举个例子么    。。  我这边不知道怎么利用两个条件  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 08:41:42 | 显示全部楼层

这样可否,参考代码:
import pandas as pd

df = pd.DataFrame(np.arange(100).reshape((10, 10)))
index = [i % 3 == 0 for i in range(len(df.index))]
df.iloc[index, :] = df.iloc[index, :] * 2

print(df)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-1 13:21:08 | 显示全部楼层
Twilight6 发表于 2022-7-1 08:41
这样可否,参考代码:

df.iloc[index, :] = df.iloc[index, :] * 2
df.iloc[index, :] = 相当于对index行重新赋值了嘛!!! 可以的 可以的
但如果我这边其实是有个这样的需求就是对于一个100*100的数据,然后又一个100行的label  然后这个label里有正有负,我需要把对应正例的行,在100*100的矩阵中每行对应的数*2 ,所以就是我先布尔索引df == 1,然后找出为true的index 然后在这样df.iloc[index, :] = df.iloc[index, :] * 2 套进去就可以了 对嘛!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 17:34:50 | 显示全部楼层
Victor0321 发表于 2022-7-1 13:21
df.iloc = df.iloc * 2
df.iloc = 相当于对index行重新赋值了嘛!!! 可以的 可以的
但如果我这边其 ...



测试看看

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-1 19:54:00 | 显示全部楼层

不太行。。。

我这样写,报错了,,我想把b里对应者就是a中的行,b中哪个元素是sb ,那a中那一行对应的值全部*2
import pandas as pd
import numpy as np

a = pd.DataFrame(np.arange(100).reshape(10,10))
print(a)

b =  ["sb","sb","sb","sb","sb","1",'2',"sb","sb","sb",]
c = pd.DataFrame(b)
index__ = []
for i in c.index:
    if c.iloc[i] == "sb":
        index__.append(i)
print(index__)


Traceback (most recent call last):
  File "/home/victor/catkin_ws/src/test1/src/my.py", line 11, in <module>
    if c.iloc[i] == "sb":
  File "/home/victor/anaconda3/lib/python3.9/site-packages/pandas/core/generic.py", line 1527, in __nonzero__
    raise ValueError(
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 20:40:23 | 显示全部楼层    本楼为最佳答案   
Victor0321 发表于 2022-7-1 19:54
不太行。。。

我这样写,报错了,,我想把b里对应者就是a中的行,b中哪个元素是sb ,那a中那一行对应 ...

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(100).reshape((10, 10)))

b =  ["sb","sb","sb","sb","sb","1",'2',"sb","sb","sb"]
index = [b[i] == "sb" for i in range(len(b))]
df.iloc[index, :] = df.iloc[index, :] * 2

print(df)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-1 21:47:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 17:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表