熊猫之间的groupby操作

时间:2020-09-28 15:49:29

标签: python pandas pandas-groupby

我有一个包含4个字段的DataFrame:Locatiom Year,Week和Sales。我想知道保留数据集粒度的两年之间的销售额差异。我的意思是,我想知道每个位置,年份和周与另一年的同一周有什么区别。

以下内容将生成具有类似结构的数据框:

raw_data = {'Location': ['A']*30 + ['B']*30 + ['C']*30,
            'Year': 3*([2018]*10+[2019]*10+[2020]*10),
            'Week': 3*(3*list(range(1,11))),
            'Sales': random.randint(100, size=(90))
}
df = pd.DataFrame(raw_data)


Location    Year    Week    Sales
A   2018    1   67
A   2018    2   93
A   2018    …   67
A   2019    1   49
A   2019    2   38
A   2019    …   40
B   2018    1   18
…   …   …   …

您能告诉我什么是最好的方法吗?

非常感谢您

1 个答案:

答案 0 :(得分:2)

您可以使用groupbyshift来做到这一点:

df["Next_Years_Sales"] = df.groupby(["Location", "Week"])["Sales"].shift(-1)
df["YoY_Sales_Difference"] = df["Next_Years_Sales"] - df["Sales"]

现场检查:

df[(df["Location"] == "A") & (df["Week"] == 1)]
Out[37]: 
   Location  Year  Week  Sales  Next_Years_Sales  YoY_Sales_Difference
0         A  2018     1     99              10.0                 -89.0
10        A  2019     1     10               3.0                  -7.0
20        A  2020     1      3               NaN                   NaN