如何在Pandas中比较两个数据框的值?

3

我有两个数据框dfdf2,如下所示:

    id  initials
0   100 J
1   200 S
2   300 Y

    name  initials
0   John   J
1   Smith  S
2   Nathan N

我想比较 dfdf2 中的 initials 列中的值,并复制名称(在 df2 中),其首字母与第一个数据框 (df) 中的首字母匹配。

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   

有什么想法来解决这个问题吗?
2个回答

4
怎么样?
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

3
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接