【问题标题】:Pandas: Calculate average for all entries that only differ in two columnsPandas:计算仅在两列中不同的所有条目的平均值
【发布时间】:2012-11-16 09:18:12
【问题描述】:

我刚拿起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),重新索引,再次将这两个东西与新索引组合为多索引,然后运行该外部多索引的平均方法等级。这是 的方法吗,如果是,我如何在代码中正确地做这些索引?

【问题讨论】:

  • 人们可以很方便地运行/测试它,以提供提供 DF 的复制/粘贴代码(而不是必须处理您的帖子)
  • 例如df.to_dict()的输出

标签: python pandas


【解决方案1】:

您可以使用 groupby(我已将您的数据框称为 df):

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

这会产生一个 MultiIndex DataFrame。要获取问题中的布局,请仅选择您想要的列并重置索引:

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

【讨论】:

    猜你喜欢
    • 2019-04-05
    • 2022-01-08
    • 2012-07-12
    • 2017-02-16
    • 2012-02-11
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多