簡體   English   中英

選擇DataFrame之間的補碼列

[英]Select complement columns between DataFrames

假設我有一個pandas.DataFrame xx被送入函數filter並返回y ,一個DataFrame刪除了x某些列。 該函數是一個黑匣子,列號很大。 我怎樣才能找到“ x”中已刪除的列?

或者, y.columns的一個子集x.columns ,我怎么能找到在列x不在y

例:

x = pd.DataFrame(np.array([[1,2,3],[4,5,6]]))
x.columns = list('abc')
y = x.iloc[:, :2].copy()
>>> x
   a  b  c
0  1  2  3
1  4  5  6
>>> y
   a  b
0  1  2
1  4  5

我想返回c列。

我現在的解決方案:

>>> xc = x.columns.values.tolist()
>>> yc = y.columns.values.tolist()
>>> diff = [i for i in xc if i not in yc]
>>> x[diff]
   c
0  3
1  6

有沒有一種方法可以在不提取列名的情況下獲得結果?

我以為這是某種基本操作,但是我找不到在線簡單的答案。

謝謝。

使用sets或熊貓difference作為:

x[x.columns.difference(y.columns)]

要么:

x[list(set(x.columns)-set(y.columns))]

這將給出x數據幀中的列值,而不是y數據幀中的列值。


print(x[x.columns.difference(y.columns)])

要么:

print(x[list(set(x.columns)-set(y.columns))])

   c
0  3
1  6

使用sets

x_col = set(x.columns)
y_col = set(y.columns)
x_col.difference(y_col)
>>{'c'}

x_col.difference(y_col)將返回僅存在於x_col但不存在於x_col中的y_col

您可以為此使用numpy

import numpy as np

diff = np.setdiff1d(xc,yc)

要么

但是,使用本機方法總是好的:

diff = list(xc - yc)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM