我有一个Pandas数据框
import pandas as pd
import numpy as np
data = pd.DataFrame({"ID1": ["a", "a", "a", "b", "b", "b", "c", "c", "c"],
"ID2": ["k", "k", "k", "k","k", "k", "j", "j", "j"],
"val": [18, 19, 20, 18, 19, 20, 34, 35, 37]
})
data
- 输出:*
ID1 ID2 val
0 a k 18
1 a k 19
2 a k 20
3 b k 18
4 b k 19
5 b k 20
6 c j 34
7 c j 35
8 c j 37
我尝试通过按ID1
分组来获得val
的平均值,最终需要按ID2
分组的sum
(data
.assign(val_id1_avg = data.groupby("ID1")["val"].transform("mean"))
.groupby("ID2")
.agg(val_avg = ("val_id1_avg", lambda x: np.sum(x.unique())),
volume=("ID1", 'nunique'))
.reset_index())
- 输出:*
ID2 val_avg volume
0 j 35.333333 1
1 k 19.000000 2
如何删除基于ID1
的重复项并对val_id1_avg
求和?
所需输出:
ID2 val_avg Volume
0 k 38.00 1
1 j 35.33 2
2条答案
按热度按时间zte4gxcn1#
您可以尝试按两个ID分组来计算平均值,然后按第二个ID分组并使用sum:
输出:
dced5bon2#
这里是技巧,替换重复的
ID1
到val_id1_avg
由Series.mask
和Series.duplicated
:详细信息: