有以下格式的数据框
data = {'regions':["USA", "USA", "USA", "FRANCE", "FRANCE","FRANCE"],
'dates':['2024-08-03', '2024-08-10', '2024-08-17','2024-08-03', '2024-08-10', '2024-08-17'],
'values': [3, 4, 5, 7, 8,0],
}
df = pd.DataFrame(data)
regions dates values
0 USA 2024-08-03 3
1 USA 2024-08-10 4
2 USA 2024-08-17 5
3 FRANCE 2024-08-03 7
4 FRANCE 2024-08-10 8
5 FRANCE 2024-08-17 0
需要将此 df 从长格式更改为宽格式。使用最近的日期作为当前日期,另外两个日期将是滞后日期。预期输出就像
regions dates values_lag2 values_lag1 values
USA 2024-08-17 3 4 5
FRANCE 2024-08-17 7 8 0
目前我使用 for 循环手动更改格式。只是想知道是否有更优雅的方式来实现它。谢谢
您可以使用
pivot_table
代替:
import pandas as pd
data = {'regions': ["USA", "USA", "USA", "FRANCE", "FRANCE", "FRANCE"],
'dates': ['2024-08-03', '2024-08-10', '2024-08-17', '2024-08-03', '2024-08-10', '2024-08-17'],
'values': [3, 4, 5, 7, 8, 0],
}
df = pd.DataFrame(data)
df['dates'] = pd.to_datetime(df['dates'])
df = df.sort_values(by=['regions', 'dates'])
wide_df = df.pivot_table(index='regions', columns='dates', values='values')
wide_df.columns = ['values_lag2', 'values_lag1', 'values']
wide_df = wide_df.reset_index()
这给出了
regions values_lag2 values_lag1 values
0 FRANCE 7 8 0
1 USA 3 4 5