【问题标题】:Python:create combination of two columns containing lists as their values in a python dataframePython:在 python 数据框中创建包含列表作为其值的两列的组合
【发布时间】:2020-08-11 06:08:32
【问题描述】:

我有一个列中包含列表的数据框,我正在尝试找出一种方法来找到两个列表的组合。关键是ID必须映射到正确的组合-

df = pd.DataFrame([[1,['a','b','c'],['l','m']],[2,['d','e','f'],['n','o']]],columns = ['id','col1','col2'])

结果应该是 -

   id col1  col2
----------------
0   1   a   l
1   1   a   m
2   1   b   l
3   1   b   m
4   1   c   l
5   1   c   m
6   2   d   n
7   2   d   o
8   2   e   n
9   2   e   o
10  2   f   n
11  2   f   o

我是 python 新手,曾尝试探索 itertools 库及其产品功能,但我不明白如何准确获取这种输出格式。

【问题讨论】:

  • df.explode('col1').explode('col2'), explode 两次

标签: python pandas list dataframe


【解决方案1】:

使用itertools.product 和列表推导来构造组合:

print (pd.DataFrame([(a,*x) for a,b,c in df.to_numpy() 
                     for x in product(b,c)],
                     columns=df.columns))

    id col1 col2
0    1    a    l
1    1    a    m
2    1    b    l
3    1    b    m
4    1    c    l
5    1    c    m
6    2    d    n
7    2    d    o
8    2    e    n
9    2    e    o
10   2    f    n
11   2    f    o

或者,如果您不想为列显式指定 a、b、c、d,则可以使用解包:

from itertools import product, chain

pd.DataFrame(chain.from_iterable(product([a], *rest) 
                                 for a, *rest in df.to_numpy()),
             columns=df.columns
             )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2022-01-17
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多