我有一个包含 group_id
、value
和 size
的 Pandas 数据框,例如:
group_id | 价值 | 尺寸 |
---|---|---|
0 | 10 | 1 |
0 | 10 | 3 |
1 | 5 | 2 |
2 | 6 | 4 |
具有相同 group_id
的行也具有相同的 value
。
我想根据大小“分配”同一组内条目的值。例如,第一行应该更新为 value = 10 * 1 / (1 + 3) = 2.5,而第二行应该更新为 value = 10 * 3 / (1+3) = 7.5,并且其余条目不应更改(因为其组中没有其他行)。
我尝试使用 groupby 构造迭代具有相同 group_id
的组,但从那里我有点迷失了。我想如果我能得到一个组的行的索引,我就可以对原始数据帧进行切片并依次操作每个组。但我不知道该怎么做,也不知道这是否是最 Pythonic 的方式。
答案 0 :(得分:1)
将值和大小相乘,然后在大小列上除以 groupby.transform
:
df['value'].mul(df['size']).div(df.groupby("group_id")['size'].transform('sum'))
0 2.5
1 7.5
2 5.0
3 6.0
dtype: float64
根据您的要求将其分配给新列或替换现有列