使用熊猫滚动差异

时间:2018-08-30 19:58:15

标签: python pandas

您好,我正在尝试使用Pandas滚动功能来计算下表中的滚动差异。我正在尝试在“每月可用项目”列中生成值,但没有得到任何结果。请帮忙!

Item    Adds    Subtracts   Month   Monthly Available items
A       71       30          Jan       41
B       19        7          Jan       12
C       68       30          Jan       38
D       34       19          Jan       15
E       180      91          Jan       89
C       58       34          Feb       62
E       222      129         Feb       182
D       26       21          Feb       20
B       65       26          Feb       51
A       62       58          Feb       45

到目前为止的Python代码:

rolling_triggers ['Adds']。rolling(window = 2).apply(lambda x:x [1]-x [0])

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的代码和注释,这将满足您的要求:

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

df['Month'] = pd.Categorical(df['Month'], categories = months)
df = df.sort_values(['Item', 'Month'])
df['Net_Items'] = df['Adds'] - df['Subtracts']
df['Monthly_Available_Items'] = df.groupby('Item')['Net_Items'].cumsum()
df = df.reset_index(drop = True)

它将返回:

  Item  Adds  Subtracts Month  Net_Items  Monthly_Available_Items
0    A    71         30   Jan         41                       41
1    A    62         58   Feb          4                       45
2    B    19          7   Jan         12                       12
3    B    65         26   Feb         39                       51
4    C    68         30   Jan         38                       38
5    C    58         34   Feb         24                       62
6    D    34         19   Jan         15                       15
7    D    26         21   Feb          5                       20
8    E   180         91   Jan         89                       89
9    E   222        129   Feb         93                      182

首先,将月份列转换为Categorical(因为按字母顺序,12月在1月之前,依此类推)。接下来,将Net_Items计算为AddsSubtracts之间的差。最后,计算每个产品的累计总和。

假设1月是第一个月,则直觉是Item A中添加了71个,而删除了30个,总共31个。下个月,添加了62个,删除了58个,因此总数为4,而前一个月的净总数为41,而总数为45。