[英]How to Compare Values of two Dataframes in Pandas?
我有两个像这样的数据帧df
和df2
id initials
0 100 J
1 200 S
2 300 Y
name initials
0 John J
1 Smith S
2 Nathan N
我想比较在( df
和df2
)中找到的initials
列中的值,然后将其初始名称与第一个数据帧( df
)中的初始名称匹配的名称(在df2
)复制
import pandas as pd
for i in df.initials:
for j in df2.initials:
if i == j:
# copy the name value of this particular initial to df
输出应如下所示:
id name
0 100 Johon
1 200 Smith
2 300
任何想法如何解决这个问题?
df1
id initials
0 100 J
1 200 S
2 300 Y
df2
name initials
0 John J
1 Smith S
2 Nathan N
使用布尔掩码: df2.initials==df1.initials
会告诉您两个initials
栏中的值是相同的。
0 True
1 True
2 False
使用此掩码创建一个新列:
df1['name'] = df2.name[df2.initials==df1.initials]
删除df1
的initials
列:
df1.drop('initials', axis=1)
使用fillna(' ')
替换NaN
df1.fillna('', inplace=True) #inplace to avoid creating a copy
id name
0 100 John
1 200 Smith
2 300
怎么样?:
df3 = df.merge(df2,on='initials',
how='outer').drop(['initials'],axis=1).dropna(subset=['id'])
>>> df3
id name
0 100.0 John
1 200.0 Smith
2 300.0 NaN
因此,“ initials”列将被删除,“ id”列中包含np.nan
所有内容也将被删除。
如果您不希望np.nan
出现在.fillna()
:
df3 = df.merge(df2,on='initials',
how='outer').drop(['initials'],axis=1).dropna(subset=['id']).fillna('')
>>> df3
id name
0 100.0 John
1 200.0 Smith
2 300.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.