通过另一列的唯一对对一列进行平均

Average of a column by unique pair of another columns

我有一个 pandas 数据框,如下所示:

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
 

我知道我可以通过使用 groupbysize 函数获得唯一对的出现次数,但是无法在 value 列上应用平均值每对独特的。 Pandas 中的 grouper 函数是否可以用于此问题?

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