我有以下数据框:
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”名称。
答案 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
的行。