将 pandas 数据框从长改为宽

问题描述 投票:0回答:1

有以下格式的数据框

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 循环手动更改格式。只是想知道是否有更优雅的方式来实现它。谢谢

python pandas dataframe
1个回答
0
投票

您可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.