Python 如何加速将列值从一个数据帧传输到另一个数据帧

Python 如何加速将列值从一个数据帧传输到另一个数据帧,python,pandas,Python,Pandas,我有一个数据框,例如: 经过一个复杂的过程后,我需要一个数据帧,如: 因此,我这样做: import pandas as pd def complex_process(value): values=value.split(',') return ['results for '+x for x in values] df=pd.DataFrame([['id1','a,b,c'],['id2','d'],['id3','e,f']],columns=['id','value

我有一个数据框,例如:

经过一个复杂的过程后,我需要一个数据帧,如:

因此,我这样做:

import pandas as pd

def complex_process(value):
    values=value.split(',')
    return ['results for '+x for x in values]

df=pd.DataFrame([['id1','a,b,c'],['id2','d'],['id3','e,f']],columns=['id','value'])

result_list=[]
id_list=[]
value_list=[]
for row in df.itertuples():
    results=complex_process(row.value)
    for result in results:
        result_list.append(result)
        id_list.append(row.id)
        value_list.append(row.value)
df_new=pd.DataFrame()
df_new['id']=id_list
df_new['value']=value_list
df_new['result']=result_list

对于大型数据集,这需要很长时间。我测试了这个复杂的过程,不需要很长时间。有没有更快的方法来传输列?

使用列表和循环执行此操作很麻烦,并且通过数据帧循环在计算上很昂贵,但是pandas有很多内置操作,因此您不需要在大多数时间内迭代数据帧

由于您的
complex_进程
函数是用作占位符的,因此让我们使用
将您的函数应用于每一行。应用
,并将结果保存在名为
结果
的新行中:

df['result'] = df.value.apply(complex_process)
您的数据帧将如下所示:

>>> df
    id  value                                        results
0  id1  a,b,c  [results for a, results for b, results for c]
1  id2      d                                [results for d]
2  id3    e,f                 [results for e, results for f]
现在,您可以使用方便的
.explode
方法将类似列表的列展开为行。这将复制其他列和索引,因此我们也可以重置索引,并删除旧索引

df_new = df.explode('result').reset_index(drop=True)
最终结果:

>>> df_new
    id  value         result
0  id1  a,b,c  results for a
1  id1  a,b,c  results for b
2  id1  a,b,c  results for c
3  id2      d  results for d
4  id3    e,f  results for e
5  id3    e,f  results for f

谢谢你花时间回答我的问题。我的目的不是拆分字符串,这只是一个示例,说明每个值的结果都来自“复杂函数”。我没有附加实际函数,因为它太长且不相关,但它做的远不止这些,需要在那里创建结果。我的问题是如何处理每行的多个结果。好吧,我想可能是这样的-我认为您可以将函数应用于每行,然后仍然使用
.explode
来处理每行的多个结果。我会在有时间时更新我的答案。我会更新我的答案,以便使用
按行应用任何函数
complex\u流程
。应用
-让我知道这是否更符合您的要求。这太棒了!谢谢你,德里克!没问题,如果我的回答是有帮助的,请考虑让同样问题的人也得到正确的答案。干杯