我们有以下具有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,而无需向数据帧添加额外的行(仅通过修改值)即可。我们该怎么做?
谢谢大家。
最佳答案
我正在使用重采样从每个组中随机选择一个值进行更改
df['New']=(1-df.groupby('ID').Load.transform('sum'))
df['Load']=df.Load.add(df.groupby('ID').New.apply(lambda x : x.sample(1)).reset_index('ID',drop=True)).fillna(df.Load)
df.drop('New',1)
Out[163]:
Num ID Load
0 1 AEC 0.209327
1 2 AEC 0.790673
2 3 CIZ 0.146566
3 4 CIZ 0.746566
4 5 CIZ 0.106869
校验
df.drop('New',1).groupby('ID').Load.sum()
Out[164]:
ID
AEC 1.0
CIZ 1.0
Name: Load, dtype: float64