我有两个数据帧df
和df2
,就像这样
id initials
0 100 J
1 200 S
2 300 Y
name initials
0 John J
1 Smith S
2 Nathan N
我想比较(initials
和df
)中找到的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
知道如何解决这个问题吗?
答案 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