如何将值插入另一个表的列中?

时间:2020-07-09 12:00:54

标签: pandas

我有两个数据集:

第一个数据集:

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

1 个答案:

答案 0 :(得分:1)

使用Series.mapSeries.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;
}