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

2024-05-16 10:56:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧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   

你知道怎么解决这个问题吗?


Tags: 数据nameinimport名称idpandasdf
2条回答
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

相关问题 更多 >