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]一样访问它们。再次非常感谢@皮尔斯平方。谢谢