熊猫 - 每个日期的总和

时间:2018-05-01 15:13:43

标签: python pandas group-by

有一个完整的脑力,应该是一个简单的熊猫例程 - 但我没有找到答案的运气。

我有一个数据框,其中包含三个感兴趣的列 - 例如下面的例子。

我想要做的就是添加一个名为“Pct_Day”的新列,该列占用每个ID日期金额的百分比,并除以该日期所有ID的总金额。

因此,对于下面的示例,第一行(8/7/17,ID:553,金额: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)

2 个答案:

答案 0 :(得分:3)

您只需要transform和div

df['New']=df.Amount/df.groupby(['DateOf']).Amount.transform('sum')
df
Out[51]: 
   Amount      DateOf   ID       New
0       3  2017-08-07  553  0.250000
1       4  2017-08-07  559  0.333333
2       5  2017-08-07  914  0.416667
3       9  2017-08-04  553  0.300000
4      11  2017-08-04  559  0.366667
5      10  2017-08-04  914  0.333333
6       3  2017-08-03  553  0.136364
7       9  2017-08-03  559  0.409091
8      10  2017-08-03  914  0.454545

答案 1 :(得分:3)

以下是步骤:

第1步:计算每个日期#include <stdio.h> const int MACRO = 6; int main() { printf("Hello Admin Please Enter the Items:\n"); char items[MACRO][20]; for (int i = 0; i < MACRO; ++i) { scanf("%19s", items[i]); } for (int i = 0; i < MACRO; ++i) { printf("%s ", items[i]); } return 0; } 的总和

Amount

第2步:使用总和计算百分比

df['sum'] = df['Amount'].groupby(df['DateOf']).transform('sum')

输出:

df['pct_day'] = df['Amount'] / df['sum'] * 100

最后,

第3步:删除总和列

   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

你也可以这样做一行:

df.drop('sum', axis=1, inplace=True)