基于Pandas datafram规则创建新列

2024-04-24 10:11:50 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我偶然发现了熊猫数据帧的问题。 我有这个数据帧。在

user    event   diff days
1001    request    45
1001    approve    43
1002    request    44
1002    approve    43
1002    request    42
1003    approve    41
1003    request    40
1003    approve    39
1003    request    38

我想根据这个规则创建一个新的column标志:我们将问题定义为在最后一次向每个用户发出请求后45天内没有发出另一个请求。在

输出应该如下所示。在

^{pr2}$

我不能用来解决问题np.哪里np.选择。任何一种解决方案都是受欢迎的。在

如果你想玩这个,你可以用它来复制我上面的数据帧。在

df = pd.DataFrame(data={'user': [1001, 1001, 1002, 1002, 1002, 1003, 1003, 1003, 1003],
                           'event': ['request', 'approve', 'request', 'approve', 'request', 'approve', 'request', 'approve', 'request'],
                           'Diff Days': [45, 43, 44, 43, 42, 41, 40, 39, 38]})

N.B.我需要标记为仅出现问题的情况,即在最后一次请求(diff days列)后45天内,我们没有为每个用户和事件发出另一个请求(我只暗示请求)。event的其余字段不起作用。


Tags: 数据用户event定义规则request标志np
1条回答
网友
1楼 · 发布于 2024-04-24 10:11:50

编辑:

在评论中,您说要标记eventrequest和{}的用户。方法如下:

users_with_problems = df.loc[(df["event"] == "request") & (df["Diff Days"] >= 45), "users"]
df["Flag"] = "No problem"
df.loc[df["user"].isin(users_with_problem), "Flag"] = "Problem"

编辑结束。在

似乎您希望Flag在出现单个问题的用户的所有行中显示{}。为此:

^{pr2}$

这将返回:

user    event  Diff Days        Flag
1001  request         45     Problem
1001  approve         43     Problem
1002  request         44  No problem
1002  approve         43  No problem
1002  request         42  No problem
1003  approve         41  No problem
1003  request         40  No problem
1003  approve         39  No problem
1003  request         38  No problem

但是,您说过您只想在diff为45或更大时标记问题。您可以按如下方式执行此操作:

df["Flag"] = "No Problem"
df.loc[df["Diff Days"] >= 45, "Flag"] = "Problem"

这将只标记diff >= 45行中的用户:

user    event  Diff Days        Flag
1001  request         45     Problem
1001  approve         43  No problem
1002  request         44  No problem
1002  approve         43  No problem
1002  request         42  No problem
1003  approve         41  No problem
1003  request         40  No problem
1003  approve         39  No problem
1003  request         38  No problem

相关问题 更多 >