如果我正确理解您的代码和注释,这将执行您想要的操作:
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
首先,将月份列转换为分类的 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Categorical.html(因为按字母顺序,十二月在一月之前,依此类推)。接下来,计算Net_Items
作为之间的差异Adds
and Subtracts
。最后计算每个产品的累积和。
假设一月是第一个月,直觉上有 71Item A
增加了 30 项,总共净增 31 项。下个月,增加了 62 项,删除了 58 项,因此净总数为 4 项,加上上个月的净项总数 41 项,总计为 45 项。