如何将函数应用于数据帧GROUPWISELY的所有列? (在蟒蛇熊猫中)

时间:2018-02-12 10:41:17

标签: python pandas dataframe pandas-groupby

如何将一个函数应用于“groupwisely”的每一列数据框? 即按一列的值分组并计算例如表示每组+其他列。预期输出是带有索引的数据框 - 不同组的名称,以及值 - 每个组+列的含义

E.g。考虑:

df = pd.DataFrame(np.arange(16).reshape(4,4), columns=['A', 'B', 'C', 'D'])
df['group'] = ['a', 'a', 'b','b']


    A   B   C   D   group
0   0   1   2   3   a
1   4   5   6   7   a
2   8   9   10  11  b
3   12  13  14  15  b

我想计算,例如np.mean为每列,但“groupwisely”, 在该特定示例中,可以通过以下方式完成:

t = df.groupby('group').agg({'A': np.mean, 'B': np.mean, 'C': np.mean, 'D': np.mean })

    A   B   C   D
group               
a   2   3   4   5
b   10  11  12  13

但是,它需要明确使用列名'A':np.mean,'B':np.mean,'C':np.mean,'D':np.mean 这对我的任务来说是不可接受的,因为它们可以改变。

3 个答案:

答案 0 :(得分:2)

您无需明确命名列。

df.groupby('group').agg('mean')

将按要求为每列产生每组的平均值:

        A   B   C   D
group                
a       2   3   4   5
b      10  11  12  13

答案 1 :(得分:2)

MaxU评论为简明groupby + GroupBy.mean

df1 = df.groupby('group').mean()
print (df1)
        A   B   C   D
group                
a       2   3   4   5
b      10  11  12  13

如果需要来自索引的列:

df1 = df.groupby('group', as_index=False).mean()
print (df1)
  group   A   B   C   D
0     a   2   3   4   5
1     b  10  11  12  13

答案 2 :(得分:1)

以下是工作:

df.groupby('group').apply(np.mean, axis=0)

回馈

          A     B     C     D
group                        
a       2.0   3.0   4.0   5.0
b      10.0  11.0  12.0  13.0

applyaxis = {0,1}作为附加参数,后者又指定是要逐行还是按列应用函数。