[英]Pandas - "select where a condition exists" between two columns of different dataframes
[英]Select complement columns between DataFrames
假設我有一個pandas.DataFrame x
, x
被送入函數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.