猿问

Pandas groupby 组间操作

我有一个包含 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    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

…   …   …   …

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


非常感谢


慕妹3242003
浏览 89回答 1
1回答

慕容3067478

您可以使用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_Difference0         A  2018     1     99              10.0                 -89.010        A  2019     1     10               3.0                  -7.020        A  2020     1      3               NaN                   NaN
随时随地看视频慕课网APP

相关分类

Python
我要回答