Pandas:如何使用 groupby 和 diff
您可以使用以下基本语法在 pandas 中将groupby()函数与diff()函数一起使用:
df = df. sort_values (by=[' group_var1 ', ' group_var2 ']) df[' diff '] = df. groupby ([' group_var1 '])[' values_var ']. diff (). fillna ( 0 )
此特定示例按两个特定变量对 DataFrame 的行进行排序,然后按group_var1对它们进行分组,并计算values_var列中的行之间的差异。
请注意, fillna(0)告诉 pandas 每当 DataFrame 中连续行之间的组变量值发生变化时插入零。
以下示例展示了如何在实践中使用此语法。
示例:如何在 Pandas 中使用带有 diff 的 groupby
假设我们有以下 pandas DataFrame,其中包含两个不同商店在不同日期的总销售额:
import pandas as pd #createDataFrame df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' date ': pd. to_datetime (['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04']), ' sales ': [12, 15, 24, 24, 14, 19, 12, 38]}) #view DataFrame print (df) blind date sales 0 A 2022-01-01 12 1 A 2022-01-02 15 2 A 2022-01-03 24 3 A 2022-01-04 24 4 B 2022-01-01 14 5 B 2022-01-02 19 6 B 2022-01-03 12 7 B 2022-01-04 38
现在假设我们要创建一个名为sales_diff的新列,其中包含按商店分组的连续日期之间的销售值差异。
我们可以使用以下语法来做到这一点:
#sort DataFrame by store and date
df = df. sort_values (by=[' store ', ' date '])
#create new column that contains difference between sales grouped by store
df[' sales_diff '] = df. groupby ([' store '])[' sales ']. diff (). fillna ( 0 )
#view update DataFrame
print (df)
store date sales sales_diff
0 A 2022-01-01 12 0.0
1 A 2022-01-02 15 3.0
2 A 2022-01-03 24 9.0
3 A 2022-01-04 24 0.0
4 B 2022-01-01 14 0.0
5 B 2022-01-02 19 5.0
6 B 2022-01-03 12 -7.0
7 B 2022-01-04 38 26.0
新的sales_diff列包含连续日期之间销售值的差异,按商店分组。
例如,我们可以看到:
- 1/1/2022 和 2/1/2022 之间商店 A 的销售额差异为3 。
- 商店 A 02/01/2022 和 03/01/2022 之间的销售额差异为9 。
- 商店 A 在 1/3/2022 和 1/4/2022 之间的销售额差异为0 。
等等。
其他资源
以下教程解释了如何在 pandas 中执行其他常见操作:
如何在 Pandas 中执行 GroupBy 求和
如何在 Pandas 中使用 Groupby 和 Plot
如何在 Pandas 中使用 GroupBy 计算唯一值