Python:创建两列的组合,在数据帧中包含列表作为其值

2024-09-25 00:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列中有列表的数据框架,我正在试图找出找到两个列表组合的最有效方法-

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

现在,这种情况下的输出是-

     col1   col2
0   [a, l]  [a, m]
1   [b, l]  [b, m]
2   [c, l]  [c, m]
3   [d, n]  [d, o]
4   [e, n]  [e, o]
5   [f, n]  [f, o]

我尝试遍历每一行,然后应用itertools.compositions。但它会因为数据帧中的行数增加而使我的系统崩溃。你能给我建议一些有效的方法吗?提前谢谢


Tags: columns数据方法框架dataframedf列表系统
2条回答

您可以使用itertools获取输出:

from itertools import product, chain, tee, islice

col1, col2 = tee(chain.from_iterable(product(col1, col2) 
                                     for col1, col2 
                                     in df.to_numpy()), 
                 2)

# Here we get alternate rows
col1 = islice(col1, None, None, 2)

col2 = islice(col2, 1, None, 2)

pd.DataFrame(zip(col1, col2), columns=["col1", "col2"])

    col1    col2
0   (a, l)  (a, m)
1   (b, l)  (b, m)
2   (c, l)  (c, m)
3   (d, n)  (d, o)
4   (e, n)  (e, o)
5   (f, n)  (f, o)

您还可以将itertools.productnumpy.reshape一起使用:

from itertools import product

print (pd.DataFrame(np.reshape([list(product(a,b))
                                for a,b in df.to_numpy()],
                               (-1,2,2)).tolist()))

        0       1
0  [a, l]  [a, m]
1  [b, l]  [b, m]
2  [c, l]  [c, m]
3  [d, n]  [d, o]
4  [e, n]  [e, o]
5  [f, n]  [f, o]

相关问题 更多 >