我有两个数据集:
第一个数据集:
Name ID
Alla 3
Peter NaN
Sara NaN
Maria NaN
第二个数据集:
Name_name ID_ID
Alla 3
Peter 4
Sara 5
我需要根据熊猫的共同属性将第二张表的ID插入到第一张表的缺失值中。怎么做。我很困惑。
结果:第一个数据集
Name ID
Alla 3
Peter 4
Sara 5
Maria NaN
使用Series.map
与Series.fillna
通过替换Series
与index
通过Name_name
由创建的列DataFrame.set_index
和选择ID_ID
:
s = df2.set_index('Name_name')['ID_ID']
df1['ID'] = df1['ID'].fillna(df1['Name'].map(s))
print (df1)
Name ID
0 Alla 3.0
1 Peter 4.0
2 Sara 5.0
如果可能,没有缺失值:
s = df2.set_index('Name_name')['ID_ID']
df1['ID'] = df1['ID'].fillna(df1['Name'].map(s)).astype(int)
其他:
s = df2.set_index('Name_name')['ID_ID']
df1['ID'] = df1['ID'].fillna(df1['Name'].map(s)).astype('Int64')
编辑:如果出现错误:
重新索引仅对唯一值索引对象有效
这意味着Name_name
列中有重复项,例如Alla
重复项,因此map
不知道使用哪个值,并且会出错。
print (df2)
Name_name ID_ID
0 Alla 3
1 Peter 4
2 Sara 5
3 Alla 8
可能的解决方案是通过以下方式删除重复的内容,并保留第一个重复的行DataFrame.drop_duplicates
:
s = df2.drop_duplicates('Name_name').set_index('Name_name')['ID_ID']
df1['ID'] = df1['ID'].fillna(df1['Name'].map(s))
print (df1)
Name ID
0 Alla 3.0
1 Peter 4.0
2 Sara 5.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句