如何通过索引重塑多列数据帧?

2024-04-24 22:59:03 发布

您现在位置:Python中文网/ 问答频道 /正文

here开始。该解决方案仅适用于一列。如何改进多栏的解决方案。i、 如果我有一个像

df= pd.DataFrame([['a','b'],['b','c'],['c','z'],['d','b']],index=[0,0,1,1])
^{pr2}$

如何重塑他们

  0   1  2  3
0  a  b  b  c 
1  c  z  d  b

如果df是

   0  1
0  a  b
1  c  z
1  d  b

那么

   0  1   2  3
0  a  b NaN  NaN
1  c  z   d  b


Tags: dataframedfindexherenan解决方案pd重塑
3条回答

使用flatten/ravel

In [4401]: df.groupby(level=0).apply(lambda x: pd.Series(x.values.flatten()))
Out[4401]:
   0  1  2  3
0  a  b  b  c
1  c  z  d  b

或者,stack

^{pr2}$

还有,指数不等

In [4435]: df.groupby(level=0).apply(lambda x: x.values.ravel()).apply(pd.Series)
Out[4435]:
   0  1    2    3
0  a  b  NaN  NaN
1  c  z    d    b

使用groupby+pd.Series+np.reshape

df.groupby(level=0).apply(lambda x: pd.Series(x.values.reshape(-1, )))

   0  1  2  3
0  a  b  b  c
1  c  z  d  b

索引数目不等的解决方案-改为调用pd.DataFrame构造函数。在

^{pr2}$
pd.DataFrame({n: g.values.ravel() for n, g in df.groupby(level=0)}).T

   0  1  2  3
0  a  b  b  c
1  c  z  d  b

这里到处都是,我太累了,没法把它弄漂亮

^{pr2}$

相关问题 更多 >