Pandas: 计算只有两列不同的所有条目的平均值

4

我刚刚开始学习 pandas,希望可以借此在Python中进行数据分析。现在我有一个如下形式的 pandas 数据框:

pandas.DataFrame({"p1": [1, 1, 2, 2, 3, 3]*2,
                  "p2": [1]*6+[2]*6,
                  "run": [1, 2]*6,
                  "result": xrange(12)})

    p1  p2  result  run
0    1   1       0    1
1    1   1       1    2
2    2   1       2    1
3    2   1       3    2
4    3   1       4    1
5    3   1       5    2
6    1   2       6    1
7    1   2       7    2
8    2   2       8    1
9    2   2       9    2
10   3   2      10    1
11   3   2      11    2

我希望生成一个框架,其中包含每组参数 p1p2 的一个条目,这些参数的所有 result 值的平均值,即:
   p1  p2  result
0   1   1     0.5
1   2   1     2.5
2   3   1     4.5
3   1   2     6.5
4   2   2     8.5
5   3   2    10.5

如何使用 pandas 来实现这个功能呢?我会尝试复制原始表格,删除不同的列(resultrun),重新索引,再将两个表格与新索引作为多索引结合起来,并在该外部多级别上运行平均值方法。这是实现该功能的方法吗?如果是,请问如何正确处理这些索引?


1
为了方便大家运行/测试,提供可复制粘贴的代码来提供DF(而不是必须处理您的帖子)会很方便。 - Jon Clements
输出 df.to_dict() 的结果: - Andy Hayden
1个回答

6
您可以使用groupby(我已经称呼您的数据框为df):
df.groupby(['p1', 'p2']).mean()

这将生成一个MultiIndex DataFrame。要得到您所需的布局,请只选择您想要的列并重置索引:

df.groupby(['p1', 'p2']).mean()['result'].reset_index()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接