首页 > 解决方案 > 将重复行转换为熊猫数据框中的列

问题描述

我正在尝试将具有重复行的数据框转换为列,如下所示

INPUT
Key  |  Value
A    |  1
B    |  2
C    |  3
A    |  4
B    |  5
C    |  6

EXPECTED OUTPUT
A  |  B  |  C
1  |  2  |  3
4  |  5  |  6

有很多选项,如 pivot()、unstack()、groupby() 等。但是,我不确定是否只使用 2 列,如输入所示。

标签: pythonpandasdataframe

解决方案


它不是一个直截了当的pivot. 使用df.pivotwithdf.apply和执行此操作Series.dropna

In [747]: x = df.pivot(index=None, columns='Key', values='Value').apply(lambda x: pd.Series(x.dropna().to_numpy()))

In [748]: x
Out[748]: 
Key    A    B    C
0    1.0  2.0  3.0
1    4.0  5.0  6.0

解释:

让我们分解一下:

首先你df像这样旋转你:

In [751]: y = df.pivot(index=None, columns='Key', values='Value')

In [752]: y
Out[752]: 
Key    A    B    C
0    1.0  NaN  NaN
1    NaN  2.0  NaN
2    NaN  NaN  3.0
3    4.0  NaN  NaN
4    NaN  5.0  NaN
5    NaN  NaN  6.0

现在我们接近您的预期输出,但我们需要删除Nan6 行并将其折叠为 2 行。

为此,我们将每一列转换为 apd.Seriesdropna()

In [753]: y.apply(lambda x: pd.Series(x.dropna().to_numpy()))
Out[753]: 
Key    A    B    C
0    1.0  2.0  3.0
1    4.0  5.0  6.0

这是您的最终输出。


推荐阅读