如何解决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.combinations。但这使我的系统崩溃,无法容纳数据帧中更多的行。您能建议我任何有效的方法吗?预先感谢。
解决方法
您可以使用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,2)
col2 = islice(col2,1,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.product
与numpy.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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。