根据2列在另一个表中添加缺失的行

时间:2018-06-28 10:07:42

标签: python pandas numpy

我有一个像波纹管这样的数据框的子集

ID  var1 var2 var3
111  A    1    1
222  A    1    1
333  A    1    1
444  A    2    1
555  A    2    1
666  A    2    1

,我想加入下面的数据框缺少的信息。但是只有那些子集包含var1和var2的ID

ID  var1 var2 var3
111  A    1    1
222  A    1    1
333  A    1    1
777  A    1    0
888  A    1    0
444  A    2    1
555  A    2    1
666  A    2    1
999  A    2    0
123  B    3    1
456  B    4    0
789  C    5    1

因此输出应为

ID  var1 var2 var3
111  A    1    1
222  A    1    1
333  A    1    1
777  A    1    0
888  A    1    0
444  A    2    1
555  A    2    1
666  A    2    1
999  A    2    0

谢谢!

2 个答案:

答案 0 :(得分:1)

使用merge

In [164]: df2.merge(df1[['var1', 'var2']].drop_duplicates())
Out[164]:
    ID var1  var2  var3
0  111    A     1     1
1  222    A     1     1
2  333    A     1     1
3  777    A     1     0
4  888    A     1     0
5  444    A     2     1
6  555    A     2     1
7  666    A     2     1
8  999    A     2     0

答案 1 :(得分:-1)

尽管零已经回答。您还可以使用Pandas Library及其DataFrame模块。它非常易于使用和理解。仅使用索引,您就可以对数据进行排序,迭代,聚合,压缩,可视化和稀疏。

将其与NumPyndarray结合使用,使其更加易于操作。 TutorialsPoint有一个很好的教程,介绍了如何结合这两种(基本功能)Python Pandas - Basic Functionality

示例

'''
ID  var1 var2 var3
111  A    1    1
222  A    1    1
333  A    1    1
444  A    2    1
555  A    2    1
666  A    2    1
'''
import pandas as pd

data = [
        [111, 'A', 1, 1],
        [222, 'A', 1, 1],
        [333, 'A', 1, 1],
        [444, 'A', 2, 1],
        [555, 'A', 2, 1],
        [666, 'A', 2, 1]
       ]

df = pd.DataFrame( data, columns = [ 'ID', 'var1', 'var2', 'var3' ] )

print(df)

输出

    ID var1  var2  var3
0  111    A     1     1
1  222    A     1     1
2  333    A     1     1
3  444    A     2     1
4  555    A     2     1
5  666    A     2     1