Python 使用熊猫滚动差异

Python 使用熊猫滚动差异,python,pandas,Python,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

您好,我正在尝试使用熊猫滚动函数来计算下表中的滚动差。我试图在每月可用项目列中生成值,但却一无所获。请帮忙

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代码:


滚动触发['Adds'].rolling(window=2).apply(lambda x:x[1]-x[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
首先,将月份列转换为a(因为按字母顺序,十二月在一月之前,等等)。接下来,计算
净项目
,作为
之间的差值。最后,计算每个产品的累积总和


假设1月是第一个月,直觉是添加了71个
项目A
,删除了30个,净总数为31个。在下一个月,增加了62个,删除了58个,因此,净总数4与上一个月的净总数41相加,总共45个。

您需要发布代码。这是我开始的内容,但我需要它来计算每个项目的差异。到目前为止,它看起来像是在计算所有项目。另外,我如何计算“减去”列中的值以获得每月可用项目中的值?减去滚动_触发器['Adds'].滚动(窗口=2).应用(lambda x:x[1]-x[0]),所以有两个月的窗口?如果你也有三月的数字,你只希望每月可用的项目关注二月和三月?我有一直到八月的月份,这只是数据的一个样本。@ALollz:我以前试图提取这个答案,但失败了。:-)太棒了,当延长到8月份时,这个效果非常好,谢谢!我不认为用整数来表示月份还是用分类来表示月份会有什么区别。