【问题标题】:Pandas explode multiple columns [duplicate]熊猫爆炸多列[重复]
【发布时间】:2020-07-08 18:41:55
【问题描述】:

我的 DF 有多个列。 其中两列是相同 len 的列表。(col2 和 col3 是列表。列表的 len 相同)。

我的目标是在自己的行上列出每个元素。

我可以使用df.explode()。但它只接受一列。但是,我希望这两列对“爆炸”。如果我先执行df.explode('col2'),然后执行df.explode('col3'),则结果为 9 行而不是 3 行。

原始DF

col0      col1        col2        col3
1       aa          [1,2,3]     [1.1,2.2,3.3]
2       bb          [4,5,6]     [4.4,5.5,6.6]
3       cc          [7,8,9]     [7.7,8.8,9.9]
3       cc          [7,8,9]     [7.7,8.8,9.9]

结束数据帧

id      col1        col2        col3
1       aa          1           1.1
1       aa          2           2.2
1       aa          3           3.3
2       bb          4           4.4
2       bb          5           5.5
2       bb          6           6.6
3       cc          ...         ...

更新 所有列都没有唯一值,因此不能用作索引。

【问题讨论】:

  • 可以在here找到更好的答案。无需使用set_indexreset_index

标签: python pandas dataframe


【解决方案1】:

您可以将col1 设置为索引并将pd.Series.explode 应用于列:

df.set_index('col1').apply(pd.Series.explode).reset_index()

或者:

df.apply(pd.Series.explode)


   col1 col2 col3
0    aa    1  1.1
1    aa    2  2.2
2    aa    3  3.3
3    bb    4  4.4
4    bb    5  5.5
5    bb    6  6.6
6    cc    7  7.7
7    cc    8  8.8
8    cc    9  9.9
9    cc    7  7.7
10   cc    8  8.8
11   cc    9  9.9

【讨论】:

  • 谢谢,我认为它会报错,因为没有一列具有唯一值,因此不能用作索引。
  • ValueError: cannot reindex from a duplicate axis 这是我在运行以下命令时遇到的错误。请指教。
  • 我有 Pandas 1.2.0,我得到了相同的 ValueError。我实际上有一个 MultiIndex,但为了可重复性,我尝试将其删除,但无论哪种方式都不起作用。
  • 不需要set_indexreset_index。只需使用df = df.apply(pd.Series.explode)。这将在您的数据框中使用lists 展开所有列。
  • @MayankPorwal 我仍然收到 ValueError: cannot reindex from a duplicate axis
【解决方案2】:

我从其他答案中借用了这个解决方案(忘记在哪里):

df.explode(['col2', 'col3']).

优势:比apply 解决方案更快。

确保 col2 和 col3 在同一行的单元格中具有相同数量的元素。

【讨论】:

  • 太棒了,正是我想要的。注意:它需要 pandas >=1.3.0
猜你喜欢
  • 1970-01-01
  • 2022-01-27
  • 2019-01-15
  • 2018-08-03
  • 2022-01-25
  • 2018-06-20
  • 2019-12-20
  • 1970-01-01
相关资源
最近更新 更多