熊猫逐行条件

时间:2019-01-28 17:31:22

标签: python-3.x pandas

我有一个这样的数据框

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'])

我想要在组中逐行显示百分比。

我该如何实现

enter image description here

2 个答案:

答案 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