假设我有一个包含3列的数据框:C1,C2和值。 我的C1和C2列都包含从0到3的值。
| C1 | C2 | Value |
|----|----|-------|
| 1 | 3 | 45 |
| 2 | 1 | -50 |
| 3 | 1 | 200 |
| 1 | 2 | -10 |
| 3 | 1 | 18 |
| 2 | 3 | 2 |
| 1 | 3 | 25 |
对于给定的索引元组(x,y),我想获取'value'列中值的平均值,其中C1中的x和C2中的y。但是,我想将元组(x,y)和(y,x)视为相同,即。没有考虑订购。 我将尝试通过一个例子来阐明我的问题: 假设C1 = 1且C1 = 3,在这种情况下,我想取45、200、18和25的平均值。 我想将结果都放入一个数据框或意甲中,并以两个顺序作为索引。在上面的示例中,平均值为72。我想在结果中输入条目(1,3)和(3,1)都具有值72。(目的是能够绘制条形图的手段。)
我希望我的描述足够清楚。
我已经使用panda groupby运算符查找方法,但是找不到处理订购问题的方法。
这是我计算均值的代码:
python results = df.groupby(['C1','C2'])['value'].mean()
我必须对两个排序取平均值,然后将结果保存回两个元组排序,但是我找不到合适的方法来做到这一点。 谢谢您的帮助!
答案 0 :(得分:3)
IIUC,您可以使用axis=1
上的np.sort()
和groupby对df进行排序:
m=pd.DataFrame(np.sort(df[['C1','C2']],axis=1),columns=['C1','C2']).join(df[['Value']])
m.groupby(['C1','C2']).Value.mean()
C1 C2
1 2 -30
3 72
2 3 2
Name: Value, dtype: int64
print(m)
C1 C2 Value
0 1 3 45
1 1 2 -50
2 1 3 200
3 1 2 -10
4 1 3 18
5 2 3 2
6 1 3 25
答案 1 :(得分:2)
推送到单行
df.Value.groupby(df[['C1','C2']].apply(frozenset,1)).mean()
(1, 3) 72
(1, 2) -30
(2, 3) 2
Name: Value, dtype: int64