Pandas 如何用宽到长或枢轴重塑数据帧?
这应该是相当简单的,但我还没有能够把我的大脑围绕它 我正在尝试将df1转换为df2,其中df1和df2是数据帧Pandas 如何用宽到长或枢轴重塑数据帧?,pandas,format,pivot,Pandas,Format,Pivot,这应该是相当简单的,但我还没有能够把我的大脑围绕它 我正在尝试将df1转换为df2,其中df1和df2是数据帧 df1 = pd.DataFrame({'site': ['1', '2'], 'sat_open': ['0900', '0900'], 'sat_close': ['1900','1900'], 'sun_open': ['1000', '1000'],
df1 = pd.DataFrame({'site': ['1', '2'],
'sat_open': ['0900', '0900'],
'sat_close': ['1900','1900'],
'sun_open': ['1000', '1000'],
'sun_close': ['1800', '1800'],
'mon_open': ['0900', '0900'],
'mon_close': ['2100', '2100']
})
df2 = pd.DataFrame({'store': ['1', '1', '1', '2', '2','2'],
'day': ['sat', 'sun', 'mon','sat', 'sun', 'mon'],
'open': ['09:00','10:00','09:00','09:00','10:00','09:00'],
'close': ['19:00','18:00','21:00','19:00','18:00','21:00']})
我尝试了regex和pivot,但找不到最好的方法。非常感谢您的帮助。您可以尝试:
(pd.wide_to_long(df1,
stubnames=['sat', 'sun','mon'],
i='site',
j='day',
sep='_', suffix='(open|close)'
)
.stack()
.unstack('day')
)
输出:
day close open
site
1 sat 1900 0900
sun 1800 1000
mon 2100 0900
2 sat 1900 0900
sun 1800 1000
mon 2100 0900
您可以首先通过在
上拆分来切换列名,然后使用:
输出
site day open close
0 1 mon 0900 2100
1 1 sat 0900 1900
2 1 sun 1000 1800
3 2 mon 0900 2100
4 2 sat 0900 1900
5 2 sun 1000 1800
谢谢你们两位的快速回复。这两种解决方案都能产生所需的结果。我最终使用了Erfan的方法,因为在每一行中都会复制存储。
site day open close
0 1 mon 0900 2100
1 1 sat 0900 1900
2 1 sun 1000 1800
3 2 mon 0900 2100
4 2 sat 0900 1900
5 2 sun 1000 1800