python - 修改 Pandas 数据框组的值

标签 python pandas pandas-groupby

我们有以下包含 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/

相关文章:

python-3.x - groupby 并根据条件修剪一些行

python - 设置 Pyramid Web 框架 | FCGI 共享主机

python - 重新计算平均值和标准平均值(Python,Pandas)

python - Matplotlib,从 pandas 数据帧在 barplot 上绘制多个单独的 hline

python - pandas 中的 drop_first 有什么用?

python - 如何通过组合现有列中的数据来创建新列?

python - 仅对选定的行和列进行 Pandas groupby

python - 在 Win7 64 位、Python 2.6.4 中安装 PIL (Python Imaging Library)

python - 记录处理程序为空 - 为什么记录 TimeRoatingFileHandler 不起作用

python - 如何在 Pandas 中对单元格进行数组操作