我有一个这样的数据框
import pandas as pd
raw_data = {'ID':['101','101','101','101','101','102','102','103'],
'Week':['W01','W02','W03','W07','W08','W01','W02','W01'],
'Orders':[15,15,10,15,15,5,10,10]}
df2 = pd.DataFrame(raw_data, columns = ['ID','Week','Orders'])
我想要在组中逐行显示百分比。
我该如何实现
答案 0 :(得分:3)
使用pct_change
df2.groupby('ID').Orders.pct_change()).add(1).fillna(0)
我发现它已连接到我的熊猫版本pct_change中,不能与groupby对象一起使用,因此我们需要对
进行处理df2['New']=sum(l,[])
df2.New=(df2.New+1).fillna(0)
df2
Out[606]:
ID Week Orders New
0 101 W01 15 0.000000
1 101 W02 15 1.000000
2 101 W03 10 0.666667
3 101 W07 15 1.500000
4 101 W08 15 1.000000
5 102 W01 5 0.000000
6 102 W02 10 2.000000
7 103 W01 10 0.000000
答案 1 :(得分:0)
执行窗口操作,将值移动1个位置
df2['prev']=df2.groupby(by='ID').Orders.shift(1).fillna(0)
使用apply()单独计算变化百分比
df2['pct'] = df2.apply(lambda x : ((x['Orders'] - x['prev']) / x['prev']) if x['prev'] != 0 else 0,axis=1)
我不确定窗口中是否有任何默认的pd.pct_change()。
ID Week Orders prev pct
0 101 W01 15 0.0 0.000000
1 101 W02 15 15.0 0.000000
2 101 W03 10 15.0 -0.333333
3 101 W07 15 10.0 0.500000
4 101 W08 15 15.0 0.000000
5 102 W01 5 0.0 0.000000
6 102 W02 10 5.0 1.000000
7 103 W01 10 0.0 0.000000