我有一个包含 4 个字段的 DataFrame:地点、年份、周和销售额。我想知道保留数据集粒度的两年之间的销售额差异。我的意思是,我想知道每个地点、年份和周与另一年的同一周有什么区别。下面将生成一个具有类似结构的 Dataframe: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 SalesA 2018 1 67A 2018 2 93A 2018 … 67A 2019 1 49A 2019 2 38A 2019 … 40B 2018 1 18… … … …您能告诉我什么是最好的方法吗?非常感谢
1 回答
![?](http://img1.sycdn.imooc.com/533e564d0001308602000200-100-100.jpg)
慕容3067478
TA贡献1773条经验 获得超3个赞
您可以使用groupby和 来做到这一点shift:
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
添加回答
举报
0/150
提交
取消