我有一个DataFrame
,它有3个数字列A,B,C
。我只需要提取所有这3列A,B,C
中的值超过其行平均值的40%的那些行。
df = pd.DataFrame([['AA',10,8,12],['BB',10,2,18],['CC',10,6,14]],
columns=['ID','A', 'B', 'C'])
print(df)
ID A B C
0 AA 10 8 12
1 BB 10 2 18
2 CC 10 6 14
字符串
我的意思是:对于第1行,A、B、C的平均值为30/3=10,我希望第1行中的所有值,无论是A还是B或C,都应大于10的40%,即:4.类似地,对于行2和行3。即使有一个元素小于这个值,我们也会删除该行。
**我的尝试:**我使用了any()
函数,但是当涉及到列的平均值时,这对我没有帮助。我总是得到空的DF
。
df = df[(df[['A','B','C']] > (0.4*df[['A','B','C']].mean(axis=1))).all(1)]
print(df)
ID A B C
型
我期待着这个:
ID A B C
0 AA 10 8 12
2 CC 10 6 14
型
所有行的平均值是10,所以如果我硬编码它,它会工作,像这样:
df[(df[['A','B','C']] > 0.4*10).all(1)]
型
如何动态地做到这一点?- 谢谢-谢谢
2条答案
按热度按时间iezvtpos1#
您可以在将每个值与40%的列
mean
进行比较并与all
进行聚合后使用,loc
。gt
(>
)用于轻松处理比较:字符串
备选方案:
型
输出量:
型
93ze6v8z2#
另一种可能的解决方案:
字符串
输出量:
型