【问题标题】:Explode multiple list columns pairs to more rows in Pandas [duplicate]将多个列表列对分解为 Pandas 中的更多行 [重复]
【发布时间】:2021-10-30 13:15:56
【问题描述】:

给定一个数据集如下:

   id          words           tags
0   1  ['Φ', '20mm']  ['xc', 'PER']
1   2  ['Φ', '80mm']    ['xc', 'm']
2   3        ['EVA']         ['nz']
3   4       ['Q345']         ['nz']

df dict 列表格式:

[{'id': 1, 'words': ['Φ', '20mm'], 'tags': ['xc', 'PER']},
 {'id': 2, 'words': ['Φ', '80mm'], 'tags': ['xc', 'm']},
 {'id': 3, 'words': ['EVA'], 'tags': ['nz']},
 {'id': 4, 'words': ['Q345'], 'tags': ['nz']}]

来自words 的元素在tags 列中具有对应的词性标记(POS 标记)。

我希望将dataframe转换成以下格式:

   id words tags
0   1     Φ   xc
1   1  20mm  PER
2   2     Φ   xc
3   2  80mm    m
4   3   EVA   nz
5   4  Q345   nz

如何在 Pandas 中实现这一点?谢谢。

【问题讨论】:

  • 如果您共享源代码会更容易:df.to_dict('records')。同时尝试:explode:-> df.explode(['words', 'tags'])
  • @sammywemmy,这行不通,explode 只接受标量,它只能分解一列
  • 请注意:在我的测试中,链接副本 (df.set_index(['id']).apply(pd.Series.explode).reset_index()) 的接受答案比此处接受的答案快约 3 倍。
  • 如果您使用的是 Pandas 1.3,explode 接受列列表/元组
  • 您可以根据需要在索引中添加任意数量的列。 ['id', 'col1', 'col2']

标签: python pandas dataframe


【解决方案1】:

您可以考虑先用idwords 分解数据帧,然后用idtags 分解数据帧,然后将它们连接起来。

import pandas as pd

df = pd.DataFrame(
    {"id":[1,2,3,4],
     "words":[['Φ', '20mm'],['Φ', '80mm'], ['EVA'], ['Q345']],
     "tags": [['xc', 'PER'],  ['xc', 'm'], ['nz'], ['nz']]})

a = df[["id", "words"]].explode("words")
b = df[["id", "tags"]].explode("tags")
pd.concat([a, b], axis=1)

【讨论】:

    猜你喜欢
    • 2016-04-06
    • 2021-07-23
    • 2017-04-16
    • 2018-03-26
    • 2018-08-15
    • 2023-01-11
    • 2016-05-31
    相关资源
    最近更新 更多