Найти разницу между двумя фреймами данных в столбцах - PullRequest
0 голосов
/ 08 ноября 2019

Это кажется такой простой проблемой, но я в тупике. Я пытаюсь вернуть новый фрейм данных (df3), содержащий разницу между df1 и df2. Меня не волнуют различия в значениях, только метки столбцов / индексы. Я пробовал 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 ]

2 голосов
/ 08 ноября 2019

У вас есть несколько вариантов. Вот некоторые

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 голос
/ 08 ноября 2019

Вы также можете попробовать isin с columns

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
1 голос
/ 08 ноября 2019

Или используя 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
...