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流程。应用-让我知道这是否更符合您的要求。这太棒了!谢谢你,德里克!没问题,如果我的回答是有帮助的,请考虑让同样问题的人也得到正确的答案。干杯