如何将不同的函数应用于pandas数据帧上的不同列

时间:2016-11-19 20:00:16

标签: python pandas numpy dataframe

我想在pandas数据帧上使用groupby,但我想得到一些列的平均值和其他列的总和。我们假设我们有以下数据框:

ID   A    B    C
1    1    1    0
1    2    3    1
1    3    6    1
4    3    2    1
4    4    1    0
6    5    1    0
6    6    6    1
6    7    2    0

我想通过ID分组并得到列#34; A"和其他列的总和(实际上我有40多列)。

我希望结果看起来像这样:

ID   A    B    C
1    2    10   2
4    3.5  3    1
6    6    9    1

提前致谢。

1 个答案:

答案 0 :(得分:7)

你可以这样做:

数据:

In [127]: df = pd.DataFrame(np.random.randint(0,10, (7,6)), columns=list('ABCDEF'))
     ...: df['ID'] = np.random.choice([1,2], len(df))
     ...:

In [128]: df
Out[128]:
   A  B  C  D  E  F  ID
0  7  7  2  2  3  0   1
1  8  4  1  3  6  8   1
2  4  7  7  2  8  4   2
3  5  9  3  6  6  1   1
4  4  6  1  7  4  6   2
5  4  5  3  8  7  6   2
6  8  4  1  8  1  0   1

解决方案:

In [129]: fnc = {c:'sum' for c in df.columns.drop(['ID','A'])}
     ...: fnc['A'] = 'mean'
     ...:

In [130]: fnc
Out[130]: {'A': 'mean', 'B': 'sum', 'C': 'sum', 'D': 'sum', 'E': 'sum', 'F': 'sum'}

In [131]: df.groupby('ID').agg(fnc).reindex_axis(df.columns.drop('ID'), 1)
Out[131]:
    A   B   C   D   E   F
ID
1   7  24   7  19  16   9
2   4  18  11  17  19  16