合并pandas DataFrame生成元素为列表的新DataFrame实现问题
你原有写法报错是因为combine方法传入的参数是整列的Series对象,对两个Series执行append会得到长度为原有2倍的新Series,和原列长度不匹配,索引对齐时就会触发重复轴的报错。
以下是两种无循环的实现方案:
方案1:配合numpy.stack实现(最优,大数据量下效率最高)
import numpy as np import pandas as pd # df1、df2为你原有的两个DataFrame df3 = pd.DataFrame( np.stack([df1, df2], axis=-1).tolist(), index=df1.index, columns=df1.columns )
np.stack([df1, df2], axis=-1)会把两个DataFrame对应位置的元素打包为长度为2的数组,再转成列表赋值给新DataFrame即可,完全没有循环开销。
方案2:纯pandas内置方法实现
如果你不想引入numpy依赖,也可以用pandas自带的方法实现:
df3 = df1.combine(df2, lambda s1, s2: list(zip(s1, s2))).applymap(list)
这里的lambda会对两个同名列的Series按位置打包为元组,再通过applymap把每个元组转为列表即可。
内容的提问来源于stack exchange,提问作者Sal
相关产品推荐
相关产品推荐

