如果我有像
这样的数据框df= pd.DataFrame(['a','b','c','d'],index=[0,0,1,1])
0 0 a 0 b 1 c 1 d
如何根据下面的索引重构数据帧,即
df= pd.DataFrame([['a','b'],['c','d']],index=[0,1])
0 1 0 a b 1 c d
答案 0 :(得分:6)
让我们使用set_index
,groupby
,cumcount
和unstack
:
df.set_index(df.groupby(level=0).cumcount(), append=True)[0].unstack()
输出:
0 1
0 a b
1 c d
答案 1 :(得分:3)
您可以将pivot
与cumcount
:
a = df.groupby(level=0).cumcount()
df = pd.pivot(index=df.index, columns=a, values=df[0])
答案 2 :(得分:2)
几种方式
<强> 1 强>
DataModel
<强> 2 强>
In [490]: df.groupby(df.index)[0].agg(lambda x: list(x)).apply(pd.Series)
Out[490]:
0 1
0 a b
1 c d
第3 强>
In [447]: df.groupby(df.index).apply(lambda x: pd.Series(x.values.tolist()).str[0])
Out[447]:
0 1
0 a b
1 c d
删除名称
In [455]: df.assign(i=df.index, c=df.groupby(level=0).cumcount()).pivot('i', 'c', 0)
Out[455]:
c 0 1
i
0 a b
1 c d