这似乎是一个简单的问题,但我很沮丧。我正在尝试返回一个包含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
答案 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)
您也可以尝试将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