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

时间:2019-07-25 15:02:21

标签: python pandas dataframe

我希望能够检查一列是否在其他列中始终具有唯一集。例如,在此数据帧中,我想测试Orange是否始终为yes,在陈旧和股票中为yes,苹果是否始终为yes,no。请为我提供有关如何在较大的数据框中执行此操作的说明,以便检查是否有一个体积是由另外两列的唯一组合映射的。

type    stale    stock      
orange    yes     yes    
apple     yes     no     
orange    yes     yes

3 个答案:

答案 0 :(得分:2)

您可以使用drop_duplicates从df中删除所有重复的行(基于相关列),然后在类型上使用groupby并检查size()是否等于{{1} }。

尝试一下:

1

输出:

print(df.drop_duplicates(['type', 'stale', 'stock']).groupby('type').size().eq(1))

这是一个更大的示例,其中包含一些也没有唯一集合的值:

type
apple     True
orange    True
dtype: bool

输出:

import pandas as pd
from io import StringIO

s = """
type    stale    stock      
orange    yes     yes    
apple     yes     no     
orange    yes     yes
orange    yes     yes
banana    yes     yes
banana    yes     no
peach     no      no
peach     yes     no
"""

df = pd.read_csv(StringIO(s), sep="\s+")

print(df.drop_duplicates(['type', 'stale', 'stock']).groupby('type').size().eq(1))

答案 1 :(得分:0)

我不确定您是否要查找数据框中存在的所有值,还是仅针对单个给定值,例如,如果要对“橙色”执行此操作,可以使用此方法:

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

答案 2 :(得分:0)

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

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