有一个完整的脑力,应该是一个简单的熊猫例程 - 但我没有找到答案的运气。
我有一个数据框,其中包含三个感兴趣的列 - 例如下面的例子。
我想要做的就是添加一个名为“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)
答案 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)