我有一个 DataFrame,其中有 3 列数值型列 A、B、C。我需要提取只包含这 3 列 A、B、C 的每行数值大于其行平均值的 40% 的行。
我的意思是:对于第一行,A、B、C的平均值为30/3=10,我希望在第一行中所有的值,无论是A还是B还是C,都应该大于10的40%,即4。同样地,对于第二行和第三行也是如此。如果有一个元素小于这个值,我们就删除那一行。
我的尝试是:我使用了
我本来就期待这个的。
所有行的平均值为10,所以如果我硬编码它,就会像这样工作:
怎样可以动态地做到这一点? 谢谢。
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
我的意思是:对于第一行,A、B、C的平均值为30/3=10,我希望在第一行中所有的值,无论是A还是B还是C,都应该大于10的40%,即4。同样地,对于第二行和第三行也是如此。如果有一个元素小于这个值,我们就删除那一行。
我的尝试是:我使用了
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)]
怎样可以动态地做到这一点? 谢谢。