我有一个如下数据框,我想创建一个字典如下:
示例:
{'52.00,20.00': [1.5,4.1,3.6,3.1], '49.25,20.00': [0.5,2.1,1,2.1]}
即。 {' A,B'的值:平均值列表(A)}
我是蟒蛇熊猫的新手,有人可以建议一下吗?
+-----------+-----------+-----------------+----------------+
| A | B | avg(A) | hour |
+-----------+-----------+-----------------+----------------+
| 52.00 | 20.00 | 1.5 | 1 |
| 52.00 | 20.00 | 4.1 | 14 |
| 52.00 | 20.00 | 3.6 | 15 |
| 52.00 | 20.00 | 3.1 | 16 |
| 49.25 | 20.00 | 0.5 | 0 |
| 49.25 | 20.00 | 2.1 | 1 |
| 49.25 | 20.00 | 1 | 14 |
| 49.25 | 20.00 | 2.1 | 15 |
| 53.75 | 20.00 | 2.66 | 20 |
| 53.75 | 20.00 | 2.66 | 21 |
| 53.75 | 20.00 | 2.66 | 22 |
| 53.75 | 20.00 | 5.07 | 23 |
| 48.00 | 20.00 | 0.97 | 0 |
| 48.00 | 20.00 | 0.97 | 1 |
| 48.00 | 20.00 | 1.57 | 14 |
| 48.00 | 20.00 | 1.57 | 15 |
答案 0 :(得分:2)
对于两列,您可以手动连接(以获得更好的性能),然后将其用作groupby
+ apply
操作的子句。
df[['A', 'B']] = df[['A', 'B']].astype(str)
df['avg(A)'].groupby(df['A'] + ',' + df['B']).apply(list).to_dict()
{
"48.0,20.0": [
0.97,
0.97,
1.57,
1.57
],
"49.25,20.0": [
0.5,
2.1,
1.0,
2.1
],
"52.0,20.0": [
1.5,
4.1,
3.6,
3.1
],
"53.75,20.0": [
2.66,
2.66,
2.66,
5.07
]
}
对于多列(不仅仅是A
和B
),您可以使用apply
和str.join
来创建一个逗号分隔的数字列,这些数字应该推广到任意列列数。
c = ['A', 'B', ...]
df['avg(A)'].groupby(df[c].astype(str).apply(','.join, 1)).apply(list).to_dict()