熊猫相同属性比较

时间:2019-09-20 22:47:35

标签: pandas dataframe comparison

我有以下数据框:

df = pd.DataFrame([{'name': 'a', 'label': 'false', 'score': 10},
                       {'name': 'a', 'label': 'true', 'score': 8},
                       {'name': 'c', 'label': 'false', 'score': 10},
                       {'name': 'c', 'label': 'true', 'score': 4},
                       {'name': 'd', 'label': 'false', 'score': 10},
                       {'name': 'd', 'label': 'true', 'score': 6},
                       ])

我想返回的名称的“假”标签得分值比“真”标签的得分值高至少两倍。在我的示例中,它应该仅返回“ c”名称。

1 个答案:

答案 0 :(得分:1)

首先,您可以旋转数据,查看比例,过滤所需内容:

new_df = df.pivot(index='name',columns='label', values='score')
new_df[new_df['false'].div(new_df['true']).gt(2)]

输出:

label  false  true
name              
c         10     4

如果只需要标签,可以执行以下操作:

new_df.index[new_df['false'].div(new_df['true']).gt(2)].values

给出

array(['c'], dtype=object)

更新:由于您的数据是orig_df.groupby().count()的结果,因此您可以执行以下操作:

orig_df['label'].eq('true').groupby('name').mean()

并查看具有值<= 1/3的行。