Python 如何按条件计算每列的平均值

Python 如何按条件计算每列的平均值,python,pandas,numpy,Python,Pandas,Numpy,我想计算数据帧中每列的平均值。 假设我有这样一个数据帧: import pandas as pd df = pd.DataFrame({'A':[1,2,3], 'B':[4,4,4], 'C':[7,8,9], 'D':[3,3,3]}) print(df) A B C D 0 1 4 7 3 1 2 4 8 3 2 3 4 9 3

我想计算数据帧中每列的平均值。 假设我有这样一个数据帧:

import pandas as pd

df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,4,4],
                   'C':[7,8,9],
                   'D':[3,3,3]})
print(df)
   A  B  C  D  
0  1  4  7  3  
1  2  4  8  3  
2  3  4  9  3
我想得到平均值为[2,1,8,1]。因为B列和D列只有唯一的值,我希望平均值是1,而不是唯一的值

我该怎么做呢?我想我应该写一个函数,然后按条件应用到每一列,但我不知道怎么做


希望有人能帮我。

那是。。想要一件奇怪的东西。:-)我建议不要称之为“卑鄙”,那样只会让人困惑

可能最简单的方法是计算实际平均值,然后用覆盖值1替换唯一列

In [226]: df.mean().where(df.nunique() > 1, 1)
Out[226]: 
A    2.0
B    1.0
C    8.0
D    1.0
dtype: float64

那是。。想要一件奇怪的东西。:-)我建议不要称之为“卑鄙”,那样只会让人困惑

可能最简单的方法是计算实际平均值,然后用覆盖值1替换唯一列

In [226]: df.mean().where(df.nunique() > 1, 1)
Out[226]: 
A    2.0
B    1.0
C    8.0
D    1.0
dtype: float64

您可以执行
df.loc[:,df.agg('nunique')>1].mean().reindex(df.columns,fill_value=1)
。。。但我怀疑这是最有效的方法。(所以我会让其他人指出一个更好的方法,不要让自己太尴尬,让它成为一个正确的答案)你可以做
df.loc[:,df.agg('nunique')>1].mean().reindex(df.columns,fill\u value=1)
。。。但我怀疑这是最有效的方法。(因此,我会让其他人指出一个更好的方法,不要让自己太尴尬,让它成为一个正确的答案)