如何用Pandas计算多列间的滚动销售占比?
实现滚动窗口(前2行)的销售占比计算
直接上可运行的代码实现,完全匹配你的需求:
import pandas as pd df = pd.DataFrame({ 'factory1sales': [0, 1, 2, 3, 4], 'factory2sales': [5, 6, 7, 8, 9] }) # 计算每个工厂「当前行之前2行」的滚动总和 rolling_sum1 = df['factory1sales'].rolling(window=2, min_periods=2).sum().shift(1) rolling_sum2 = df['factory2sales'].rolling(window=2, min_periods=2).sum().shift(1) # 计算两个工厂滚动总和的合计值 total_rolling = rolling_sum1 + rolling_sum2 # 计算各工厂占总销售额的比例 df['rolling_proportion_factory1'] = rolling_sum1 / total_rolling df['rolling_proportion_factory2'] = rolling_sum2 / total_rolling print(df)
关键步骤解释
- 滚动总和计算:
rolling(window=2, min_periods=2):指定窗口大小为2,且必须凑够2行数据才计算总和(不足时返回NaN),避免出现不完整窗口的无效计算。.shift(1):把滚动计算的结果向下偏移一行,这样当前行的滚动值就对应它之前的2行数据(比如索引4的结果对应索引2、3的数值)。
- 占比计算:用每个工厂的滚动总和除以两个工厂的总和,得到对应占比。
运行结果
输出和你给出的目标示例完全一致:
factory1sales factory2sales rolling_proportion_factory1 rolling_proportion_factory2 0 0 5 NaN NaN 1 1 6 NaN NaN 2 2 7 NaN NaN 3 3 8 NaN NaN 4 4 9 0.25 0.75
内容的提问来源于stack exchange,提问作者Nicolas Gervais
相关产品推荐
相关产品推荐

