嗨,我有这样的数据框:
Date A_2002 B_2003 C_2004 D_2005 Type
03-2002 20 30 12 42 X
04-2002 12 321 12 23 X
03-2002 10 31 2 3 Y
我想将其转换为长版本并从中提取字符串类型,因此最终结果将是:
Date NewCol Extracted Type Value
03-2002 A 2002 X 20
03-2002 B 2003 X 30
03-2002 C 2004 X 12
03-2002 D 2005 X 42
04-2002 A 2002 X 12
04-2002 B 2003 X 321
04-2002 C 2004 X 12
04-2002 D 2005 X 23
03-2002 A 2002 Y 10
03-2002 B 2003 Y 31
03-2002 C 2004 Y 2
03-2002 D 2005 Y 3
因此,最终结果会将列名中的值转换为两个新值并如上所示融合数据。 Pandas 可以吗?
最佳答案
你可以在 stack
和 set_index
之后做 str.split
:
m = df.set_index(['Date','Type'])
m.columns = m.columns.str.split('_',expand=True)
out = (m.stack([0,1]).rename('Value').reset_index()
.rename(columns={'level_2':'NewCol','level_3':'Extracted'}))
Date Type NewCol Extracted Value
0 03-2002 X A 2002 20.0
1 03-2002 X B 2003 30.0
2 03-2002 X C 2004 12.0
3 03-2002 X D 2005 42.0
4 04-2002 X A 2002 12.0
5 04-2002 X B 2003 321.0
6 04-2002 X C 2004 12.0
7 04-2002 X D 2005 23.0
8 03-2002 Y A 2002 10.0
9 03-2002 Y B 2003 31.0
10 03-2002 Y C 2004 2.0
11 03-2002 Y D 2005 3.0
关于python - 转换长数据帧并提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61104122/