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

Kyl*_*ton 3 dataframe pandas

我正在寻找一种方法来确定pandas数据框的一个列或一组列是否唯一地标识该数据框的行。我已经在Stata中看到了这个称为isid函数的函数。

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

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

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

unu*_*tbu 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
Run Code Online (Sandbox Code Playgroud)

  • 嗯,我想这可能比使用重复的要慢,但在少数测试用例中,这总是更快(不是显着更快,但在我尝试的每种情况下都明显更快) (2认同)