首页 > 解决方案 > 反转熊猫数据框中的行和列

问题描述

我试图扭转这一点,但我不知道如何。我从

>>> d = {'col1': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'], 'col2': [1, 2, 3, 4, 5, 6, 7, 7]}
>>> df = pd.DataFrame(data=d)
>>> df
  col1  col2
0    A     1
1    A     2
2    A     3
3    B     4
4    B     5
5    B     6
6    C     7
7    C     7

我想获得:

col1  new_1  new_2  new_3
0    A      1      2      3
1    B      4      5      6
2    C      7      7  empty

其中有基于 col1 项重复的最大次数的 new_x 列。这似乎是一个非常标准的转置,但我找不到解决方案。

如有重复请见谅。

谢谢天狼星

标签: pythonpandas

解决方案


它不是单行的,但可能更简单/更容易理解。

首先,聚合到一个列表列:

df_ = pd.DataFrame(df.groupby('col1').col2.agg(list))

这使

           col2
col1           
A     [1, 2, 3]
B     [4, 5, 6]
C        [7, 7]

然后,从这些列表中构建一个新的 DataFrame:

df2 = (pd.DataFrame(df_.col2.tolist(), index=df_.index).add_prefix('new_')
                                                       .reset_index())

这使

  col1  new_0  new_1  new_2
0    A      1      2    3.0
1    B      4      5    6.0
2    C      7      7    NaN

请注意:

  • 我解释empty为一个空单元格,而不是'empty'字符串
  • NaN始终被视为浮点数,这就是为什么此列中的值由 pandas 转换为浮点数的原因

推荐阅读