如何有效地遍历一个数据框中的列值并找到该值出现在其他数据框中的行?
How to efficiently go over column values in one dataframe and find row in which the value occurs in other dataframe?
我有 2 个 Pandas 数据帧。
df1:
stringColumn
0 see ya
1 yo
2 mkey
df2:
name alias1 alias2
0 goodbye see ya bye
1 OK cool mkey
2 hello hey yo
我想以一种有效的方式遍历 df1['stringColumn'] 中的列值,搜索 df1 中的值出现在 df2 中的行索引,并将其交换df2['name'] 列中的相应值。
最终结果将是:
df1:
stringColumn
0 goodbye
1 hello
2 OK
目前我在做:
for index, row in df1.iterrows():
row['stringColumn'] = df2[df2.apply(lambda rowAlias: rowAlias.astype(str).str.contains(row['stringColumn'], case=False).any(), axis=1)]['name'].values[0]
它工作正常,但速度非常慢,特别是因为我在 df1 中有大约 5000 行,在 df2 中有大约 100 行和 10 列。
一定有比这个怪物更简单、更快的东西。
您可以在 melt
之后执行 merge
s=df1.merge(df2.melt('name'),left_on='stringColumn',right_on='value',how='left')[['stringColumn','name']]
s
stringColumn name
0 seeya goodbye
1 yo hello
2 mkey OK
import pandas as pd
df1 = pd.DataFrame(data={'c11':[1,2,3]})
df2 = pd.DataFrame(data={'c21':[11,12,13], 'c22':[1,2,3]})
df1.loc[df2['c22']==df1['c11'],'c11'] = df2['c21']
df2['c22']==df1['c11']这个条件是检查df1和df2的列的值,'c11'是df1通过loc方法创建的新列并将 RHS 值分配给该列。 如果 df1 和 df2 的列长度为 different.It,此解决方案将无效。
有帮助请点个赞。
我有 2 个 Pandas 数据帧。
df1:
stringColumn
0 see ya
1 yo
2 mkey
df2:
name alias1 alias2
0 goodbye see ya bye
1 OK cool mkey
2 hello hey yo
我想以一种有效的方式遍历 df1['stringColumn'] 中的列值,搜索 df1 中的值出现在 df2 中的行索引,并将其交换df2['name'] 列中的相应值。
最终结果将是:
df1:
stringColumn
0 goodbye
1 hello
2 OK
目前我在做:
for index, row in df1.iterrows():
row['stringColumn'] = df2[df2.apply(lambda rowAlias: rowAlias.astype(str).str.contains(row['stringColumn'], case=False).any(), axis=1)]['name'].values[0]
它工作正常,但速度非常慢,特别是因为我在 df1 中有大约 5000 行,在 df2 中有大约 100 行和 10 列。
一定有比这个怪物更简单、更快的东西。
您可以在 melt
merge
s=df1.merge(df2.melt('name'),left_on='stringColumn',right_on='value',how='left')[['stringColumn','name']]
s
stringColumn name
0 seeya goodbye
1 yo hello
2 mkey OK
import pandas as pd
df1 = pd.DataFrame(data={'c11':[1,2,3]})
df2 = pd.DataFrame(data={'c21':[11,12,13], 'c22':[1,2,3]})
df1.loc[df2['c22']==df1['c11'],'c11'] = df2['c21']
df2['c22']==df1['c11']这个条件是检查df1和df2的列的值,'c11'是df1通过loc方法创建的新列并将 RHS 值分配给该列。 如果 df1 和 df2 的列长度为 different.It,此解决方案将无效。 有帮助请点个赞。