繁体   English   中英

如何比较熊猫中两个数据框的值?

[英]How to Compare Values of two Dataframes in Pandas?

我有两个像这样的数据帧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列中的值,然后将其初始名称与第一个数据帧( 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]

删除df1initials列:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM