查找列上两个数据框之间的差异

时间:2019-11-08 04:59:47

标签: python python-3.x pandas data-science

这似乎是一个简单的问题,但我很沮丧。我正在尝试返回一个包含df1和df2之间差异的新数据帧(df3)。我不在乎值的差异,只在乎列标签/索引。我尝试过pd.columns.difference(),但无济于事。我的预期输出是:

df1 
1  2  3  4  5  6  7  8  9  10 11 12 13 14
C  C  C  C  C  C  T  T  T  T  T  S  S  S
G  N  D  A  G  N  D  A  G  N  D  A  G  N
K  M  I  L  R  K  M  I  L  R  K  M  I  L
C  C  L  C  C  C  T  T  T  T  T  S  S  S
G  N  D  A  E  N  D  A  G  N  D  A  G  N
Y  F  V  H  Q  E  P  W  Y  F  V  H  Q  E
G  N  D  A  G  N  F  A  G  G  D  A  G  N
G  Y  D  A  G  N  D  A  G  N  D  A  G  N

df2 
1  4  9
C  C  T
G  A  G
K  L  L
C  C  T
G  A  G
Y  H  Y
G  A  G
G  A  G

Expected df3: 
2  3  5  6  7  8  10 11 12 13 14
C  C  C  C  T  T  T  T  S  S  S
N  D  G  N  D  A  N  D  A  G  N
M  I  R  K  M  I  R  K  M  I  L
C  L  C  C  T  T  T  T  S  S  S
N  D  E  N  D  A  N  D  A  G  N
F  V  Q  E  P  W  F  V  H  Q  E
N  D  G  N  F  A  G  D  A  G  N
Y  D  G  N  D  A  N  D  A  G  N



3 个答案:

答案 0 :(得分:2)

您有一些选择。这是一些

df3 = df1[[col for col in df1.columns if col not in df2.columns]]

df3 = df1.drop(df2.columns, axis=1)

但是,第二种方法将要求df2的所有列都存在于df1中,如@Chris的注释中所述。

答案 1 :(得分:1)

或使用pandas.DataFrame.columns.difference

df3 = df1[df1.columns.difference(df2.columns, False)]

输出:

   2  3  5  6  7  8 10 11 12 13 14
0  C  C  C  C  T  T  T  T  S  S  S
1  N  D  G  N  D  A  N  D  A  G  N
2  M  I  R  K  M  I  R  K  M  I  L
3  C  L  C  C  T  T  T  T  S  S  S
4  N  D  E  N  D  A  N  D  A  G  N
5  F  V  Q  E  P  W  F  V  H  Q  E
6  N  D  G  N  F  A  G  D  A  G  N
7  Y  D  G  N  D  A  N  D  A  G  N

答案 2 :(得分:1)

您也可以尝试将isincolumns

df3 = df1.loc[:, ~df1.columns.isin(df2.columns)]

Out[215]:
   2  3  5  6  7  8 10 11 12 13 14
0  C  C  C  C  T  T  T  T  S  S  S
1  N  D  G  N  D  A  N  D  A  G  N
2  M  I  R  K  M  I  R  K  M  I  L
3  C  L  C  C  T  T  T  T  S  S  S
4  N  D  E  N  D  A  N  D  A  G  N
5  F  V  Q  E  P  W  F  V  H  Q  E
6  N  D  G  N  F  A  G  D  A  G  N
7  Y  D  G  N  D  A  N  D  A  G  N
相关问题