将DF中的一列与另一个DF中的存在进行比较,然后填充

时间:2020-03-02 13:34:34

标签: python pandas dataframe

我有2个DF,我要检查df1 [“ A”]是否在df2中。如果没有,请用0填充df2 [“ A”]。

我将它与for循环一起使用时很丑陋,我尝试对其进行优化,但是我找不到执行该操作的方法。

testing_list = list(testing_df.columns)

for i in range(len(training_df.columns)):
    if not training_df.columns[i] in testing_list:
        testing_df[training_df.columns[i]] = 0

1 个答案:

答案 0 :(得分:1)

DataFrame.reindexIndex.union创建的新列一起使用:

testing_df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'F':list('aaabbb')
})

training_df = pd.DataFrame({
        'A':list('abcdef'),
         'C':[7,8,9,4,2,3],
         'D':[1,3,5,7,1,0],

})

cols = testing_df.columns.union(training_df.columns, sort=False)
df = testing_df.reindex(cols, axis=1, fill_value=0)
print (df)
   A  B  F  C  D
0  a  4  a  0  0
1  b  5  a  0  0
2  c  4  a  0  0
3  d  5  b  0  0
4  e  5  b  0  0
5  f  4  b  0  0

如果要为两个带有排序列的数据框添加列,请使用DataFrame.align

testing_df, training_df = testing_df.align(training_df, fill_value=0)
print (testing_df)
   A  B  C  D  F
0  a  4  0  0  a
1  b  5  0  0  a
2  c  4  0  0  a
3  d  5  0  0  b
4  e  5  0  0  b
5  f  4  0  0  b

print (training_df)
   A  B  C  D  F
0  a  0  7  1  0
1  b  0  8  3  0
2  c  0  9  5  0
3  d  0  4  7  0
4  e  0  2  1  0
5  f  0  3  0  0