【发布时间】:2021-04-06 23:03:25
【问题描述】:
我有 2 列(名称和 ID)的数据框。有成千上万的名字。但是每个名字,只有两个id(90和91,所以id列只包含90和91)。
示例数据框如下所示。
name id
kevin 90
kevin 91
kevin 90
kevin 90
John 90
John 90
John 90
John 90
John 90
kevin 90
kevin 90
kevin 91
kevin 91
首先需要groupby使用 name 和 id 列并获取每个组合的计数。
预期输出:
name id count
kevin 90 13
91 2
elly 91 15
john 90 6
adam 90 3
91 20
anjelo 90 12
91 19
然后需要使用以下条件进行违规分类。
-
名称包含只有一个 id(90 或 91),它不违规(例如 elly 和 john 不是违规者)。
-
名称包含两个 id,
i.) 90:小于 5 和 91:任意数字(大于 0)>>>>>>> 不违规强>(例如:亚当)
ii.) 所有其他 id 组合>>>>> 违规者(例如:kevin 和 anjelo)
最终预期的数据框:
name violation
kevin 1
elly 0
john 0
adam 0
anjelo 1
我这样做的目的:
首先我使用 name 和 id 分组并获取每个组合的计数(但此方法不返回上面显示的数据帧。)
df.groupby(['name', 'id']).size().reset_index(name='counts')
在第二部分,我只知道如果 name 包含两个 ids(90 和 91),如何识别违规者。我不知道如何给已确定的违规者提供上述条件。
x = df.groupby('name').id.unique().reset_index()
x['Violation'] = x.id.apply(lambda x: 1 if (90, 91) in zip(x, x[1:]) else 0)
x.drop('id', 1, inplace=True)
x
非常感谢您的支持!!!!!!!!!!!!!!!
【问题讨论】:
标签: python pandas dataframe classification pandas-groupby