我有两个数据集:
第一个数据集:
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
答案 0 :(得分:1)
使用Series.map
和Series.fillna
,用Series
创建的index
列中的Name_name
替换为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
不知道使用了哪个值,并且出错了。
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
可能的解决方案是使用DataFrame.set_index
通过保留第一重复的行来删除重复项:
int hcf (int a, int b) {
int gcd;
for (int i = 0; i <= a && i <= b; i++) {
if (a % i == 0 && b % i == 0) {
gcd = i;
return gcd;
}
}
return -1;
}