我有一个数据结构:
id | data1 | data2 | data3
---------------------------
1 | 's11' | 's12' | 's13'
2 | 's21' | 's22' | 's23'
3 | 's31' | 's32' | 's33'
从中我想得到这样的一套:
id | data
----------
1 | 's11'
1 | 's12'
1 | 's13'
2 | 's21'
2 | 's22'
2 | 's23'
3 | 's31'
3 | 's32'
3 | 's33'
我试过这样:
import pandas as pd
df = pd.DataFrame(
{"id": [1, 2, 3], "data1": ['s11', 's22', 's33'], "data2": ["s21", 's22', 's23'],
'data3': ['s31', 's32', 's33']})
df2 = pd.concat([df[['id', 'data1']], df[['id', 'data2']], df[['id', 'data3']]], keys=['d1', 'd2', 'd3'])
是什么给出了这样的集合:
data1 data2 data3 id
--------------------------
d1 0 s11 NaN NaN 1
1 s22 NaN NaN 2
2 s33 NaN NaN 3
d2 0 NaN s21 NaN 1
1 NaN s22 NaN 2
2 NaN s23 NaN 3
d3 0 NaN NaN s31 1
1 NaN NaN s32 2
2 NaN NaN s33 3
我打算进一步分组
df3 = df2.fillna('zzz').groupby('id').first()
结果:
data1 data2 data3
id
1 s11 zzz zzz
2 s22 zzz zzz
3 s33 zzz zzz
一般来说,这对我来说并不奏效,因为分组按键折叠了我的行。似乎我可以通过将列重命名为相同并执行来生成更多 DataFrame concat,但在我看来,应该有一种更简单的方法。我该如何解决我的问题?
我也看向一边pivot_table,但什么也做不了。
来源 DF:
解决方案