给出代表用户事件的df。
index id action_id feature session_id n_page duration
1 1 null null 1_1 1 1
2 1 3 a 1_1 2 1
3 1 null 1_1 3 1
4 1 null pay 1_1 4 1
5 1 24 1_1 5 1
6 1 107 1_1 6 2
7 2 null 2_1 1 1
8 2 107 c 2_1 2 1
9 2 null 2_1 3 1
10 2 34 pay 2_1 4 1
仅当在具有action_id == 34或24且n_page值通过action_id的会话中,当action id == 3或107时,我需要按session_id分组并获取功能列的最后一个值
输出df:
session_id n_page feature sum_duration
1_1 5 a 7
2_1 4 c 4
答案 0 :(得分:1)
df_group = df[["session_id", "sum_duration"]].groupby("session_id")["sum_duration"].sum().reset_index()
df_dup = df[(df["action_id"] == 3)| (df["action_id"] == 104)]["session_id","n_page","feature"]
df_dup.merge(df_group, on = "session_id", how = "inner" )
我们可以根据所需的输出更改加入条件。 如果这不能产生所需的输出,那么如果提供用于创建输入数据的代码,那就太好了。
答案 1 :(得分:0)
通过boolean indexing
和Series.isin
过滤行,并通过merge
合并在一起:
df1 = df.loc[df['action_id'].isin([3,107]),["session_id","feature"]]
df2 = df.loc[df['action_id'].isin([34,24]),["session_id","n_page"]]
df3 = pd.merge(df1, df2, on='session_id')
print (df3)
session_id feature n_page
0 1_1 a 5
1 2_1 c 4
答案 2 :(得分:0)
尝试以下方法。希望这会有所帮助。
如果数据集很大,请首先执行分组。
grouped_df = data_df.groupby('id')
现在从grouped_df的对象中逐个获取分组的df
grouped_df.get_group(1)[ (grouped_df.get_group(1)['action_id'] == 3) | (grouped_df.get_group(1)['action_id'] == 107) ]
您可以使用所需的键值代替get_group函数中的1来获取所需的组。