我的数据框如下:
Date Symbol Quantity Volume
0 07-04-2020 ACC 1579268 554047
1 08-04-2020 ACC 2153627 586886
2 09-04-2020 ACC 2658885 1128891
3 07-04-2020 ADANIENT 2463525 408903
4 08-04-2020 ADANIENT 3237290 255480
5 09-04-2020 ADANIENT 2359528 335061
我想对“ Symbol”执行groupby并计算从第1个日期开始的增加或减少的百分比,例如(在我的示例中为07-04-2020)用于后续行。
我想要如下结果:
Date Symbol Quantity Volume PctCH_Qty PctCH_Vol
0 07-04-2020 ACC 1579268 554047 0 0
1 08-04-2020 ACC 2153627 586886 36.37 5.93
2 09-04-2020 ACC 2658885 1128891 68.36 103.75
3 07-04-2020 ADANIENT 2463525 408903 0 0
4 08-04-2020 ADANIENT 3237290 255480 31.41 -37.52
5 09-04-2020 ADANIENT 2359528 335061 -4.22 -18.06
答案 0 :(得分:2)
想法是将每个组的第一个值除以GroupBy.transform
和first
,再减去1
,多个100
和最后一轮:
cols = ['Quantity','Volume']
df[['PctCH_Qty','PctCH_Vol']] = (df[cols].div(df.groupby('Symbol')[cols]
.transform('first'), axis=0)
.sub(1)
.mul(100)
.round(2))
print (df)
Date Symbol Quantity Volume PctCH_Qty PctCH_Vol
0 07-04-2020 ACC 1579268 554047 0.00 0.00
1 08-04-2020 ACC 2153627 586886 36.37 5.93
2 09-04-2020 ACC 2658885 1128891 68.36 103.75
3 07-04-2020 ADANIENT 2463525 408903 0.00 0.00
4 08-04-2020 ADANIENT 3237290 255480 31.41 -37.52
5 09-04-2020 ADANIENT 2359528 335061 -4.22 -18.06