我正在寻找一个方式做等效于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