首页 > 解决方案 > 按另一列的唯一对计算一列的平均值

问题描述

我有一个熊猫数据框如下:

df = pd.DataFrame({'start': {0: 365, 1: 365, 2: 365, 3: 365, 4: 356, 5: 261, 6: 240, 7: 238},
 'end': {0: 240, 1: 261, 2: 356, 3: 238, 4: 365, 5: 365, 6: 365, 7: 365},
 'value': {0: 585, 1: 567, 2: 191, 3: 186, 4: 196, 5: 545, 6: 564, 7: 184}})

这是数据框的样子,

    start   end     value   
1   365     240     585     
2   365     261     567     
3   365     356     191     
4   365     238     186
5   356     365     196     
6   261     365     545     
7   240     365     564     
8   238     365     184 

有四对独特的起始端。我想要一个数据框,每个独特的对都有一个平均值。输出数据框如下所示:

        start   end     value   
    1   365     240     574.5   
    2   365     261     556     
    3   365     356     193.5   
    4   365     238     185
 

groupby我知道我可以通过使用和函数来获得唯一对的出现次数size,但无法在value每个唯一对的列上应用平均值。Pandas 的函数是否grouper可以解决这个问题?

标签: pandas-groupbyaggregation

解决方案


IIUC,您想对开始和结束进行排序,然后对这两列进行分组平均:

df[["start", "end"]] = -np.sort(-df.iloc[:, :2], axis=1)
df.groupby(["start", "end"]).value.mean().reset_index()

# out:
   start  end  value
0    365  238  185.0
1    365  240  574.5
2    365  261  556.0
3    365  356  193.5

推荐阅读