熊猫将行值除以聚合总和,条件由其他单元格设置
Posted
技术标签:
【中文标题】熊猫将行值除以聚合总和,条件由其他单元格设置【英文标题】:pandas divide row value by aggregated sum with a condition set by other cell 【发布时间】:2017-01-16 05:02:53 【问题描述】:您好希望得到一些帮助,我有两列 Dataframe df
作为;
Source ID
1 2
2 3
1 2
1 2
1 3
3 1
我的目的是将源分组并根据分组的源将 ID 单元格除以总数,并将其附加到原始数据框,以便新列看起来像;
Source ID ID_new
1 2 2/9
2 3 3/3
1 2 2/9
1 2 2/9
1 3 3/9
3 1 3/1
我已经做到了;
df.groupby('Source ID')['ID'].sum()
要获得ID
的总数,但我不确定下一步该去哪里。
【问题讨论】:
【参考方案1】:试试这个:
In [79]: df.assign(ID_new=df.ID/df.groupby('Source').ID.transform('sum'))
Out[79]:
Source ID ID_new
0 1 2 0.222222
1 2 3 1.000000
2 1 2 0.222222
3 1 2 0.222222
4 1 3 0.333333
5 3 1 1.000000
如果你需要它作为一个新的 persistent 列,你可以按照@jezrael 在comment 中提出的建议:
In [81]: df['ID_new'] = df.ID/df.groupby('Source').ID.transform('sum')
In [82]: df
Out[82]:
Source ID ID_new
0 1 2 0.222222
1 2 3 1.000000
2 1 2 0.222222
3 1 2 0.222222
4 1 3 0.333333
5 3 1 1.000000
【讨论】:
嗯,也许你可以在没有assign
的情况下添加经典方式:)
df['ID_new']=df.ID/df.groupby('Source').ID.transform('sum')
以上是关于熊猫将行值除以聚合总和,条件由其他单元格设置的主要内容,如果未能解决你的问题,请参考以下文章