通过另一列的唯一对对一列进行平均
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
我知道我可以通过使用 groupby
和 size
函数获得唯一对的出现次数,但是无法在 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
我有一个 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
我知道我可以通过使用 groupby
和 size
函数获得唯一对的出现次数,但是无法在 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