我正在寻找一种方法来确定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>
答案 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