计算Pandas Dataframe中每几列的平均值

时间:2019-07-12 10:09:41

标签: python-3.x pandas aggregate

我有一个熊猫数据框,数据:

ID | A1| A2| B1| B2 
ID1| 2 | 1 | 3 | 7 
ID2| 4 | 6 | 5 | 3

我想分别按行计算列(A1和A2)和(B1和B2)的均值。我想要的输出:

ID | A1A2 mean | B1B2 mean
ID1| 1.5       | 5
ID2| 5         | 4

我可以同时处理所有列,但找不到任何函数来获取所需的输出。
Python中有任何内置方法吗?

1 个答案:

答案 0 :(得分:1)

DataFrame.groupby与lambda函数一起使用来获取mean的列的首字母,如果第一列不是索引,也请使用DataFrame.set_index

df=df.set_index('ID').groupby(lambda x: x[0], axis=1).mean().add_suffix('_mean').reset_index()
print (df)
    ID  A_mean  B_mean
0  ID1     1.5     5.0
1  ID2     5.0     4.0

另一种解决方案是通过索引str[0]提取列名称:

df = df.set_index('ID')

print (df.columns.str[0])
Index(['A', 'A', 'B', 'B'], dtype='object')

df = df.groupby(df.columns.str[0], axis=1).mean().add_suffix('_mean').reset_index()
print (df)
    ID  A_mean  B_mean
0  ID1     1.5     5.0
1  ID2     5.0     4.0

或者:

df = (df.set_index('ID')
        .groupby(df.columns[1:].str[0], axis=1)
        .mean()
        .add_suffix('_mean').reset_index()

验证解决方案:

a = df.filter(like='A').mean(axis=1)
b = df.filter(like='B').mean(axis=1)

df = df[['ID']].assign(A_mean=a, B_mean=b)
print (df)
    ID  A_mean  B_mean
0  ID1     1.5     5.0
1  ID2     5.0     4.0

编辑:

如果列名不同,则需要在列表中指定它们:

a = df[['A1','A2']].mean(axis=1)
b = df[['B1','B2']].mean(axis=1)

df = df[['ID']].assign(A_mean=a, B_mean=b)
print (df)