我有这样一个数据帧:
import pandas as pd
df = pd.DataFrame({
'ind1': list('AAABBBCCC'),
'ind2': list(map(int, list('123123123'))),
'val1': [0, 0, 0, -1, -4, 5, 10, 11, 4],
'val2': [0.1, 0.2, -0.2, 0.1, 0.2, 0.2, -0.1, 2, 0.1]
})
df = df.set_index(['ind1', 'ind2'])
结果数据:
val1 val2
ind1 ind2
A 1 0 0.1
2 0 0.2
3 0 -0.2
B 1 -1 0.1
2 -4 0.2
3 5 0.2
C 1 10 -0.1
2 11 2.0
3 4 0.1
我要选择以下所有条目:
val1
中至少有一项不相等0
val2
中的每个绝对值都是< 0.5
因此,在上述示例中
B 1 -1 0.1
2 -4 0.2
3 5 0.2
应该留下来
我不能使用sum()
,因为值可以是正的也可以是负的
df.reset_index().groupby('ind1').sum()
ind2 val1 val2
ind1
A 6 0 0.1
B 6 0 0.5
C 6 25 2.0
不起作用
在这里如何使用any()
和all()
这对我很有效,类似于温的解决方案:
输出:
一种方法是通过
groupby().filter()
(link to docs)对每个组(相对于每个数据帧行)计算布尔条件:请注意,
DataFrame.groupby.filter()
与同名方法DataFrame.filter()
无关没有lambda by
transform
相关问题 更多 >
编程相关推荐