我不知道如何在没有链式作业的情况下做到这一点(这可能无论如何都行不通,因为我会设置一个副本)。
我不想获取多索引pandas数据帧的子集,测试小于零的值并将其设置为零。
例如:
df = pd.DataFrame({('A','a'): [-1,-1,0,10,12],
('A','b'): [0,1,2,3,-1],
('B','a'): [-20,-10,0,10,20],
('B','b'): [-200,-100,0,100,200]})
df[df['A']<0] = 0.0
给予
In [37]:
df
Out[37]:
A B
a b a b
0 -1 0 -20 -200
1 -1 1 -10 -100
2 0 2 0 0
3 10 3 10 100
4 12 -1 20 200
这表明它无法根据条件进行设置。或者,如果我做了一个链式作业:
df.loc[:,'A'][df['A']<0] = 0.0
这将给出相同的结果(并设置为复制警告)
我可以根据第一个级别是我想要的级别的条件循环遍历每个列:
for one,two in df.columns.values:
if one == 'A':
df.loc[df[(one,two)]<0, (one,two)] = 0.0
从而得到所需的结果:
In [64]:
df
Out[64]:
A B
a b a b
0 0 0 -20 -200
1 0 1 -10 -100
2 0 2 0 0
3 10 3 10 100
4 12 0 20 200
但不知怎么的,我觉得有一个更好的方法来做这件事,而不是在列中循环。在熊猫身上最好的方法是什么?
这是一个应用程序(也是使用多索引切片器的主要动机之一),请参见文档here
由于您使用的是列索引的第一级,因此下面的操作也将有效。上面的例子更一般,假设您想为“a”执行此操作。
相关问题 更多 >
编程相关推荐