Python 访问for循环中groupby对象中的多索引列名
假设我有这样一个数据帧:Python 访问for循环中groupby对象中的多索引列名,python,pandas,Python,Pandas,假设我有这样一个数据帧: df = pd.DataFrame({"name":["ss", "ss", "ss", "xx", "xx", "xx"], "num":[1,1,2,1,1,2], "m":[1,2,3,4,5,6]}) 在上面的代码中,生成的数据帧如下所示 但我真正想要的是: 如果我使用了apply来执行该功能,我就可以使用reset\u index来获得我想要的。但我正在计算的工作流程与下面给出的示例类似。使用group['name']或group['num']返回整个
df = pd.DataFrame({"name":["ss", "ss", "ss", "xx", "xx", "xx"], "num":[1,1,2,1,1,2], "m":[1,2,3,4,5,6]})
在上面的代码中,生成的数据帧如下所示
但我真正想要的是:
如果我使用了apply
来执行该功能,我就可以使用reset\u index
来获得我想要的。但我正在计算的工作流程与下面给出的示例类似。使用group['name']
或group['num']
返回整个序列。如何在最终数据帧中获取组名和num
忽略函数定义(它只是一个伪函数),我的函数定义要比计算平均值复杂得多 让我们使用
groupby
、mean
和reset\u 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
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
name num m
0 ss 1 1.5
1 ss 2 3.0
2 xx 1 4.5
3 xx 2 6.0
让我们使用
groupby
、mean
和reset\u 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
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
name num m
0 ss 1 1.5
1 ss 2 3.0
2 xx 1 4.5
3 xx 2 6.0
尽可能完美。@Scott Boston:谢谢!!那个函数只是一个伪函数。我的函数定义更复杂!!我不知道我可以像I[0]一样访问它们。再次非常感谢@皮尔斯平方。谢谢。尽可能完美。@Scott Boston:谢谢!!那个函数只是一个伪函数。我的函数定义更复杂!!我不知道我可以像I[0]一样访问它们。再次非常感谢@皮尔斯平方。谢谢