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

时间:2016-07-29 03:56:12

标签: python pandas dictionary dataframe

我有两个数据帧dfdf2,就像这样

    id  initials
0   100 J
1   200 S
2   300 Y

    name  initials
0   John   J
1   Smith  S
2   Nathan N

我想比较(initialsdf)中找到的df2列中的值,并复制其初始匹配的名称(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 个答案:

答案 0 :(得分:2)

怎么样?:

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

因此'首字母'列被删除,“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

var result = arr.map(function(item) {
    return {
        name: item.name,
        age: item.age.value
    };
});

答案 1 :(得分: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]

删除initials中的df1列:

df1.drop('initials', axis=1)

使用NaN

替换fillna(' ')
df1.fillna('', inplace=True) #inplace to avoid creating a copy

    id   name                                                                                                                                                                 
0  100   John                                                                                                                                                                 
1  200  Smith                                                                                                                                                                 
2  300