【问题标题】:Combination of pair elements within lists in a DataFrameDataFrame中列表中对元素的组合
【发布时间】:2021-03-05 00:03:05
【问题描述】:

我正在尝试获取 DataFrame 中的元素对组合(列表元素)。我需要保留第一列以确定元素对的原始“组”,但将元素列表拆分为新行中的元素对。

我会有以下情况:

Group X
0 Group 1 A,B,C
1 Group 2 D,E
2 Group 3 F,G,H,I

输出应该是这样的:

Group X
0 Group 1 A,B
1 Group 1 A,C
2 Group 1 B,C
3 Group 2 D,E
4 Group 3 F,G
5 Group 3 F,H
6 Group 3 F,I
7 Group 3 G,H
8 Group 3 G,I
9 Group 3 H,I

我想保留属于每个组合的Group 列。我不知道如何遍历 DataFrame 并在每一行中保留 Group 值。

【问题讨论】:

  • 作为一个供您探索的想法:将您的 X 列变成几列,并在它们上运行 intertools 的组合。

标签: python pandas dataframe combinations


【解决方案1】:

使用itertools.combinations 查找数据框中每一行的长度为 2 的元素的所有组合。这将为您提供一个使用explode 分解的列表,如下所示:

from itertools import combinations

df['X'] = df['X'].apply(lambda l: list(combinations(l, 2)))
df = df.explode('X')

结果:

     Group    X
0  Group 1  A,B
0  Group 1  A,C
0  Group 1  B,C
1  Group 2  D,E
2  Group 3  F,G
2  Group 3  F,H
2  Group 3  F,I
2  Group 3  G,H
2  Group 3  G,I
2  Group 3  H,I

【讨论】:

    【解决方案2】:

    Shaido 的回答很好,但我想补充一点

      1. 创建玩具数据集
    
    import pandas as pd 
    import numpy as np 
    import itertools
    basedata = pd.DataFrame({"Group":['Group1', 'Group2', 'Group3'],
    "x":['A,B,C', 'D,E', 'F,G,H,I']})
    basedata
    

      1. 用“,”分割字符
    basedata['x'] = basedata['x'].apply(lambda x: x.split(','))
    basedata
    

    • 3.使用itertools生成组合
    basedata['x'] = basedata['x'].apply(lambda x: list(itertools.combinations(x, 2)))
    basedata
    

      1. 使用 pandas 的 explode 函数来分解“x”
    basedata = basedata.explode("x")
    basedata
    

    • 5 变换设置为字符
    basedata['x'] = basedata['x'].apply(lambda x: ','.join(x))
    basedata
    

    获取更多信息,您可以点击这些链接:

    https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html

    https://docs.python.org/3/library/itertools.html#itertools.combinations

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 2020-05-23
      • 2016-08-15
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 2015-01-24
      相关资源
      最近更新 更多