Moh*_*lah 5 python dataframe pandas
我有2个Dataframe如下:
DF1=
A B C D
0 AA BA KK 0
1 AD BD LL 0
2 AF BF MM 0
DF2=
K L
0 AA BA
1 AD BF
2 AF BF
Run Code Online (Sandbox Code Playgroud)
最后我想得到的是:
DF1=
A B C D
0 AA BA KK 1
1 AD BD LL 0
2 AF BF MM 1
Run Code Online (Sandbox Code Playgroud)
所以,我想比较两个数据帧,我想看看第一个数据帧的哪一行(对于列A和B)与第二个数据帧(列K和L)的共同点,并在第一个数据帧的库D上分配1.
我可以使用for循环,但对于大量条目来说它会非常慢.
任何线索或建议将不胜感激.
EdC*_*ica 13
如果您重命名列,这将更容易df2,然后您可以逐行比较:
In [35]:
df2.columns = ['A', 'B']
df2
Out[35]:
A B
0 AA BA
1 AD BF
2 AF BF
In [38]:
df1['D'] = (df1[['A', 'B']] == df2).all(axis=1).astype(int)
df1
Out[38]:
A B C D
0 AA BA KK 1
1 AD BD LL 0
2 AF BF MM 1
Run Code Online (Sandbox Code Playgroud)
小智 6
df1['ColumnName'].isin(df2['ColumnName']).value_counts()
Run Code Online (Sandbox Code Playgroud)
这就是我解决它的方法:
df1 = pd.DataFrame({"A":['AA','AD','AD'], "B":['BA','BD','BF']})
df2 = pd.DataFrame({"A":['AA','AD'], 'B':['BA','BF']})
df1['compressed']=df1.apply(lambda x:'%s%s' % (x['A'],x['B']),axis=1)
df2['compressed']=df2.apply(lambda x:'%s%s' % (x['A'],x['B']),axis=1)
df1['Success'] = df1['compressed'].isin(df2['compressed']).astype(int)
print df1
A B compressed Success
0 AA BA AABA 1
1 AD BD ADBD 0
2 AD BF ADBF 1
Run Code Online (Sandbox Code Playgroud)