确定熊猫数据框的列是否唯一标识行

时间:2018-07-24 01:59:57

标签: pandas dataframe

我正在寻找一种方法来确定pandas数据框的一列或一组列唯一地标识该数据框的行。我看过这个叫做isid function in Stata.

我能想到的最好的方法是使用集合理解来获取列的子集的唯一值,并断言集合中的值与数据帧中的行一样多:

subset = df[["colA", "colC"...]]
unique_vals = {tuple(x) for x in subset.values}
assert(len(unique_vals) == len(df))

这不是世界上最优雅的答案,所以我想知道是否有内置函数可以执行此操作,或者是否可以测试列的子集是否为唯一值索引。 / p>

3 个答案:

答案 0 :(得分:5)

您可以建立索引并检查其is_unique属性:

import pandas as pd

df1 = pd.DataFrame([(1,2),(1,2)], columns=list('AB'))

df2 = pd.DataFrame([(1,2),(1,3)], columns=list('AB'))

print(df1.set_index(['A','B']).index.is_unique)
# False

print(df2.set_index(['A','B']).index.is_unique)
# True

答案 1 :(得分:3)

您可以检查

<section>

查看是否有来自列df[['x', 'y']].transform(tuple,1).duplicated(keep=False).any() x的值集重复的行。

示例:

y

然后df = pd.DataFrame({'x':[1,2,3,4,4], 'y': ["a", "b", "c", "d","d"]}) x y 0 1 a 1 2 b 2 3 c 3 4 d 4 4 d

transform

然后检查0 (1, a) 1 (2, b) 2 (3, c) 3 (4, d) 4 (4, d) dtype: object

duplicated()

请注意,0 False 1 False 2 False 3 True 4 True dtype: bool transforming可能不是必需的

tuple

答案 2 :(得分:2)

也许FacebookActivity groupby

size