Skip to main content
 首页 » 编程设计

python之Pandas之每个日期的总和

2025年05月04日15itcoder

用什么应该是一个简单的 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