我有两个熊猫数据框。
我要一行一行地尝试检查df1 [column]中的值是否在df2 [column]中,并将此信息记录到df1中。
我在下面有一个“玩具”示例。但是我的实际数据集有150,000行。
下面的代码运行良好,但是在更大的数据集上,我实际上不得不停止内核,这花费了太长时间。
df1= pd.DataFrame([['1', 'a'],
['2', 'b'],
['3', 'b'],
['4', 'z'],
['5', 'e']], columns=['num', 'num_letter'])
# adding an extra column to record result of check for duplicates
df1['dupe'] = None
df2= pd.DataFrame([['1', 'a'],
['2', 'b'],
['3', 'b'],
['4', 'd'],
['5', 'e']], columns=['num', 'num_letter'])
for i in range(len(df1)):
for k in df1['num_letter']:
# if value from df1 is found in df2 column,
# record the word 'dupe' to corresponding empty cell in df1.
if k in df2['num_letter'].values:
df1.loc[i,'dupe'] = 'dupe'
else:
df1.loc[i,'dupe'] = 'not_dupe'
有没有更有效的方法?
谢谢大家
答案 0 :(得分:2)
in1d
和where
df1.assign(dupe=np.where(np.in1d(df1.num_letter, df2.num_letter), 'dupe', 'not_dupe'))
num num_letter dupe
0 1 a dupe
1 2 b dupe
2 3 b dupe
3 4 z not_dupe
4 5 e dupe