gpt4 book ai didi

python - 当来自多个列的条件在 python 中匹配时添加一行?

转载 作者:太空宇宙 更新时间:2023-11-04 02:01:40 24 4
gpt4 key购买 nike

我正在尝试在数据框中添加一行。条件是当用户再次返回应用程序(300 秒后)时,我需要添加一行。下面是我的代码。它工作正常但需要大量执行时间,因为真实数据框有 1000 万行。

for i in range(1,len(df)):
if df['user_id'][i]==df['user_id'][i-1] and (df['start_time'][i]-df['start_time'][i-1]).seconds>300:
df.loc[len(df)]=[df['user_id'][i],df['start_time'][i],'psuedo_App_start_2']

输入:

user_id   start_time        event
100 03/04/19 6:11 psuedo_App_start
100 03/04/19 6:11 notification_receive
100 03/04/19 8:56 notification_dismiss
10 03/04/19 22:05 psuedo_App_start
10 03/04/19 22:05 subcategory_click
10 03/04/19 22:06 subcategory_click

输出应该是这样的:

user_id   start_time        event
100 03/04/19 6:11 psuedo_App_start
100 03/04/19 6:11 notification_receive
100 03/04/19 8:56 psuedo_App_start_2
100 03/04/19 8:56 notification_dismiss
10 03/04/19 22:05 psuedo_App_start
10 03/04/19 22:05 subcategory_click
10 03/04/19 22:06 subcategory_click

从输出中可以看出,为 user_id = 100 添加了一行,因为他在 8.56 回来,即 300 秒后。

最佳答案

首先按 2 个条件过滤 - 比较 user_id by DataFrameGroupBy.shift每组的编辑值,以及每组的差异 DataFrameGroupBy.diff ,然后通过 DataFrame.assign 重新分配 evet 列, 最后 concat在一起并按 DataFrame.sort_values 排序:

#MM/DD/YY HH:MM
#df['start_time'] = pd.to_datetime(df['start_time'])
#DD/MM/YY HH:MM
#df['start_time'] = pd.to_datetime(df['start_time'], dayfirst=True)

m1 = df['user_id'].eq(df.groupby('user_id')['user_id'].shift())
m2 = df.groupby('user_id')['start_time'].diff().dt.total_seconds() > 300

df1 = df[m1 & m2].assign(event='psuedo_App_start_2')

df1 = (pd.concat([df, df1], ignore_index=True)
.sort_values(['user_id','start_time'], ascending=[False, True]))
print (df1)
user_id start_time event
0 100 2019-03-04 06:11:00 psuedo_App_start
1 100 2019-03-04 06:11:00 notification_receive
2 100 2019-03-04 08:56:00 notification_dismiss
6 100 2019-03-04 08:56:00 psuedo_App_start_2
3 10 2019-03-04 22:05:00 psuedo_App_start
4 10 2019-03-04 22:05:00 subcategory_click
5 10 2019-03-04 22:06:00 subcategory_click

关于python - 当来自多个列的条件在 python 中匹配时添加一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55557470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com