如何计算 pandas 中每组的偏移量
您可以使用以下方法来计算 pandas DataFrame 中的组移位值:
方法一:按组计算偏移量
df[' lagged_values '] = df. groupby ([' group '])[' values ']. shift ( 1 )
方法二:按多组计算偏移量
df[' lagged_values '] = df. groupby ([' group1 ', ' group2 '])[' values ']. shift ( 1 )
请注意, shift()函数的值指示要计算移位的值的数量。
以下示例展示了如何在实践中使用每种方法。
示例1:按组计算偏移量
假设我们有以下 pandas DataFrame,它显示了两家商店连续几天的销售额:
import pandas as pd #createDataFrame df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]}) #view DataFrame print (df) blind sales 0 to 18 1 to 10 2 to 14 3 to 13 4 B 19 5 B 24 6 B 25 7 B 29
我们可以使用以下语法创建一个偏移列,显示每个商店前一天的销售额:
#add column that displays lag of sales column by store df[' lagged_sales '] = df. groupby ([' store '])[' sales ']. shift ( 1 ) #view updated DataFrame print (df) store sales lagged_sales 0 to 18 NaN 1 to 10 18.0 2 A 14 10.0 3 A 13 14.0 4 B 19 NaN 5 B 24 19.0 6 B 25 24.0 7 B 29 25.0
以下是如何解释结果:
- 偏移列中的第一个值是NaN ,因为商店 A 的销售列中没有先前的值。
- 偏移列中的第二个值是18 ,因为它是商店 A 的销售额列中的上一个值。
等等。
示例2:计算多个组的偏移量
假设我们有以下 pandas DataFrame,它显示了两家商店的员工连续几天的销售额:
import pandas as pd #createDataFrame df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' employee ':['O', 'O', 'R', 'R', 'O', 'O', 'R', 'R'], ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]}) #view DataFrame print (df) store employee sales 0 AO 18 1 AO 10 2 AR 14 3 AR 13 4 BO 19 5 BO 24 6 BR 25 7 BR 29
我们可以使用以下语法创建一个偏移列,显示每个商店每个员工前一天的销售额:
#add column that displays lag of sales column by store and employee df[' lagged_sales '] = df. groupby ([' store ',' employee '])[' sales ']. shift ( 1 ) #view updated DataFrame print (df) store employee sales lagged_sales 0 AO 18 NaN 1 AO 10 18.0 2 AR 14 NaN 3 AR 13 14.0 4 BO 19 NaN 5 BO 24 19.0 6 BR 25 NaN 7 BR 29 25.0
新的lagged_sales列显示每家商店每位员工前一天的销售额。
注意:在此示例中,我们按两列进行分组,但您可以通过在groupby()函数中包含任意数量的变量名称来按任意数量的列进行分组。
其他资源
以下教程解释了如何在 pandas 中执行其他常见任务:
如何删除 Pandas 中的列
如何排除 Pandas 中的列
如何将函数应用于 Pandas 中的选定列
如何更改 Pandas DataFrame 中的列顺序