我们有以下包含 3 列的数据框 (df)。目标是确保每个组基于 ID 的“负载”总和等于 1。
pd.DataFrame({'ID':['AEC','AEC','CIZ','CIZ','CIZ'],'Load':[0.2093275,0.5384086,0.1465657,0.7465657,0.1465657]})
Num ID Load
1 AEC 0.2093275
2 AEC 0.5384086
3 CIZ 0.1465657
4 CIZ 0.7465657
5 CIZ 0.1465657
如果一个组的总负载小于或大于 1,我们只想从该组的 一个成员 中添加或减去,以使总和等于 1,而不向数据帧添加额外的行(只需通过修改值)。我们怎样才能做到这一点?
最佳答案
可以使用drop_duplicates保留每个组中的第一条记录,然后更改Load值,使其组Load sum为1。
df.loc[df.ID.drop_duplicates().index, 'Load'] -= df.groupby('ID').Load.sum().subtract(1).values
df
Out[92]:
Num ID Load
0 1 AEC 0.461591
1 2 AEC 0.538409
2 3 CIZ 0.106869
3 4 CIZ 0.746566
4 5 CIZ 0.146566
df.groupby('ID').Load.sum()
Out[93]:
ID
AEC 1.0
CIZ 1.0
Name: Load, dtype: float64
关于python - 修改 Pandas 数据框组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48533538/