我正在尋找一個方式做等效於SQL如何在熊貓的多個數據框列中「選擇不同」?
「SELECT DISTINCT COL1,COL2 FROM dataframe_table」
大熊貓的SQL比較沒有任何東西 「不同」我想我可以將列連接起來,或者把它們放在一個列表/元組中,然後比較這種方式,但是這看起來像是大熊貓應該以更原始的方式進行操作。
我錯過了一些明顯的東西,還是沒有辦法做到這一點?
我正在尋找一個方式做等效於SQL如何在熊貓的多個數據框列中「選擇不同」?
「SELECT DISTINCT COL1,COL2 FROM dataframe_table」
大熊貓的SQL比較沒有任何東西 「不同」我想我可以將列連接起來,或者把它們放在一個列表/元組中,然後比較這種方式,但是這看起來像是大熊貓應該以更原始的方式進行操作。
我錯過了一些明顯的東西,還是沒有辦法做到這一點?
可以使用drop_duplicates
方法得到的數據幀中的唯一行:
In [29]: df = pd.DataFrame({'a':[1,2,1,2], 'b':[3,4,3,5]})
In [30]: df
Out[30]:
a b
0 1 3
1 2 4
2 1 3
3 2 5
In [32]: df.drop_duplicates()
Out[32]:
a b
0 1 3
1 2 4
3 2 5
你可以如果您只想使用某些列來確定唯一性,則還提供subset
關鍵字參數。請參閱docstring。
比我的更好的方法+1 – EdChum
對於df沒有unique
方法,如果每列的唯一值的數目是相同的,那麼以下方法將工作:df.apply(pd.Series.unique)
但如果不是,那麼您將得到一個錯誤。另一種方法是將值存儲在其中列名鍵的字典:
In [111]:
df = pd.DataFrame({'a':[0,1,2,2,4], 'b':[1,1,1,2,2]})
d={}
for col in df:
d[col] = df[col].unique()
d
Out[111]:
{'a': array([0, 1, 2, 4], dtype=int64), 'b': array([1, 2], dtype=int64)}
您可以乘坐列集和從大集只是減去小集:
distinct_values = set(df['a'])-set(df['b'])
你不得不這樣做'df.apply(pd.Series.unique)'但如果唯一值的數目在列之間變化,那麼這將不起作用,因此您必須將列名的字典作爲關鍵字並將唯一值構造爲值 – EdChum
[http://support.quest.com](http://stackoverflow.com/documentation/pandas/1751/indexing-and-selecting-data/26077/select-distinct-rows-across-dataframe) – user2314737