2 回答
TA贡献1810条经验 获得超5个赞
首先stack,然后unstack。我们需要做更多的工作,然后才能拆开数据。
u = df.stack()
(u.to_frame()
.set_index(u.groupby(u.index).cumcount(), append=True)
.unstack(1)
.sort_index(level=1)[0]
.reset_index(drop=True))
col1 col2
0 a a
1 a b
2 a c
3 c NaN
4 d NaN
5 c NaN
另一种选择是groupby,to_dict和重建。
dct = (df.groupby(df.columns, axis=1)
# x.values.ravel().tolist()
.apply(lambda x: [z for y in x.values for z in y])
.to_dict())
pd.DataFrame.from_dict(dct, orient='index').T
col1 col2
0 a a
1 c b
2 a c
3 d None
4 a None
5 c None
TA贡献1893条经验 获得超10个赞
melt groupby 和 concat
d={x : y['value'].reset_index(drop=True) for x,y in df.melt().groupby('variable')}
df=pd.concat(d,1)
df
Out[39]:
col1 col2
0 a a
1 a b
2 a c
3 c NaN
4 d NaN
5 c NaN
添加回答
举报