我有两个数据帧

    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

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

最佳答案

怎么样?:

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

09-07 08:09