首页 > 解决方案 > Python:在 python 数据框中创建包含列表作为其值的两列的组合

问题描述

我有一个数据框,其列中有列表,我试图找出一种方法来找到两个列表的组合。关键是 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 库及其产品功能,但我不明白如何准确获得这种输出格式。

标签: pythonpandaslistdataframe

解决方案


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
             )

推荐阅读