如何将一个函数应用于“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 这对我的任务来说是不可接受的,因为它们可以改变。
答案 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
apply
将axis = {0,1}
作为附加参数,后者又指定是要逐行还是按列应用函数。