Python 根据其他列值的组合检查唯一列值

Python 根据其他列值的组合检查唯一列值,python,pandas,dataframe,Python,Pandas,Dataframe,我希望能够检查一列在其他列中是否始终具有唯一集。例如,在这个数据框中,我想测试Orange在stale and stock中是否总是有值yes,yes,apple是否总是有值yes,no。请告诉我如何对更大的数据框执行此操作,以便检查一个卷是否映射为另外两列的唯一组合 type stale stock orange yes yes apple yes no orange yes yes 您可以使用从df中删除

我希望能够检查一列在其他列中是否始终具有唯一集。例如,在这个数据框中,我想测试Orange在stale and stock中是否总是有值yes,yes,apple是否总是有值yes,no。请告诉我如何对更大的数据框执行此操作,以便检查一个卷是否映射为另外两列的唯一组合

type    stale    stock      
orange    yes     yes    
apple     yes     no     
orange    yes     yes
您可以使用从df中删除所有重复的行(基于相关列),然后使用on type并检查
size()
是否等于
1

试试这个:

print(df.drop_重复(['type','stale','stock'])).groupby('type').size().eq(1))
输出:

type
apple     True
orange    True
dtype: bool
type
apple      True
banana    False
orange     True
peach     False
dtype: bool
下面是一个更大的示例,其中一些值也没有唯一的集合:

将熊猫作为pd导入
从io导入StringIO
s=”“”
类型过期存货
橙色是的是的
苹果是不是
橙色是的是的
橙色是的是的
香蕉是的是的
香蕉是不是
桃子不,不
桃子是不是
"""
df=pd.read_csv(StringIO,sep=“\s+”)
打印(df.drop_副本(['type','stale','stock'])).groupby('type').size().eq(1))
输出:

type
apple     True
orange    True
dtype: bool
type
apple      True
banana    False
orange     True
peach     False
dtype: bool

我不确定您是否希望找出数据帧中存在的所有值,或者它是否仅适用于单个给定值,例如,如果您希望对“orange”这样做,您可以使用以下方法:

df.loc[df["type"] == "orange"].nunique().stale == 1 & df.loc[df["typee"] == "orange"].nunique().stock == 1

可以按大小分组两次。第一个折叠为唯一的组合,第二个检查每个类型是否只有一个

df.groupby([*df]).size().groupby('type').size().eq(1)
#type
#apple     True
#orange    True
#dtype: bool

这将不起作用,因为它不会考虑到有组
类型
谢谢您提供的详细答案。如果我想打印每种类型的所有唯一过时值和库存值呢。例如:苹果会给我(是的,不是),橘子会给我(是的,是的),香蕉会给我(是的是的)和(是的不是)。@ezra只需删除“.size”后面的所有内容,groupby就可以做到这一点。