说我有这样的数据框:
df = pd.DataFrame({"name":["ss", "ss", "ss", "xx", "xx", "xx"], "num":[1,1,2,1,1,2], "m":[1,2,3,4,5,6]})
def somefunction(m):
mean = np.mean(np.array(list(m)))
return mean
result = []
for i,group in df.groupby(['name', 'num'], as_index=False):
row_result = []
mean = somefunction(group['m'])
row_result = [group['name'], group['num'], mean ]
result.append(row_result)
headers = ['name', 'num', 'm']
stats1 = pd.DataFrame(result, columns=headers)
stats1
使用上面的代码,我得到的数据帧看起来像这样。
但我真正想要的是以下内容:
如果我使用apply
来执行此功能,我可以使用reset_index
来获取我想要的内容。但我正在计算的工作流程与我在下面给出的示例类似。使用group['name']
或group['num']
会返回整个系列。如何在最终数据框中获取组名和数字?
忽略函数定义(它只是虚拟),我的比计算平均值复杂得多。
答案 0 :(得分:2)
让我们使用groupby
,mean
和reset_index
:
df.groupby(['name','num']).mean().reset_index()
输出:
name num m
0 ss 1 1.5
1 ss 2 3.0
2 xx 1 4.5
3 xx 2 6.0
使用您的代码,您可以通过i
:
def somefunction(m):
mean = np.mean(np.array(list(m)))
return mean
result = []
for i,group in df.groupby(['name', 'num'], as_index=False):
row_result = []
mean = somefunction(group['m'])
row_result = [i[0], i[1], mean ]
result.append(row_result)
headers = ['name', 'num', 'm']
stats1 = pd.DataFrame(result, columns=headers)
stats1
输出:
name num m
0 ss 1 1.5
1 ss 2 3.0
2 xx 1 4.5
3 xx 2 6.0