您好,我正在尝试使用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])
答案 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
计算为Adds
和Subtracts
之间的差。最后,计算每个产品的累计总和。
假设1月是第一个月,则直觉是Item A
中添加了71个,而删除了30个,总共31个。下个月,添加了62个,删除了58个,因此总数为4,而前一个月的净总数为41,而总数为45。