用什么应该是一个简单的 pandas 例程完全卡住大脑 - 但我没有运气找到答案。
我有一个数据框,其中包含对此感兴趣的三列 - 下面的示例。
我想做的就是添加一个名为“Pct_Day”的新列,该列采用每个 ID 日期金额的百分比除以该日期所有 ID 的总金额。
因此对于下面的示例,第一行 (8/7/17, ID: 553, Amount: 3) 的结果将是 0.25000 (3/(3+4+5))
感谢您的帮助 - 需要回到 Pandas 秋千......
df_dict={'DateOf': ['2017-08-07','2017-08-07','2017-08-07','2017-08-04','2017-08-04','2017-08-04'
, '2017-08-03','2017-08-03','2017-08-03'], 'ID': ['553','559','914','553','559','914','553','559','914'], 'Amount': [3, 4, 5, 9, 11, 10, 3, 9, 10]}
df=pd.DataFrame(df_dict)
请您参考如下方法:
步骤如下:
第 1 步:计算每个日期的Amount总和
df['sum'] = df['Amount'].groupby(df['DateOf']).transform('sum')
第 2 步:使用总和计算百分比
df['pct_day'] = df['Amount'] / df['sum'] * 100
输出:
Amount DateOf ID sum pct_day
0 3 2017-08-07 553 12 25.000000
1 4 2017-08-07 559 12 33.333333
2 5 2017-08-07 914 12 41.666667
3 9 2017-08-04 553 30 30.000000
4 11 2017-08-04 559 30 36.666667
5 10 2017-08-04 914 30 33.333333
6 3 2017-08-03 553 22 13.636364
7 9 2017-08-03 559 22 40.909091
8 10 2017-08-03 914 22 45.454545
最后,
第 3 步:删除总和列
df.drop('sum', axis=1, inplace=True)
你也可以像这样在一行中完成:
df['pct_day'] = df['Amount'] / df['Amount'].groupby(df['DateOf']).transform('sum') * 100
