python - 无需合并的 Pandas 索引匹配

标签 python pandas merge

所以我有两个数据框。 activity_log 根据客户端的client_id 记录客户端登录的时间。如果客户端在一段时间内多次登录,则 client_id 可能会出现多次。

我需要在此 activity_log 中创建第三列,以查找创建客户端的日期。这个 created_date 是通过查看 user_table 中最早的 user_created 日期计算出来的。

事件日志

<表类="s-表"> <头> client_id 事件日期 创建日期 <正文> 1 12/12/2022 1 2022/11/12 1 2022/09/12 1 2022/8/12 2 12/12/2022 2 2022/11/12 3 2022/10/12 3 2022/09/12

用户表

<表类="s-表"> <头> client_id user_id user_created <正文> 1 12asdasd3 12/12/2021 1 1sads23 2021-11-12 1 asasdsa2 10/12/2021 2 32asdasd1 12/12/2021 2 3asdasd21 2021-11-12 3 1asdsaa22 2021/2/12

我试过使用 pandas merge

activity_log.merge(client_table[['client_id','user_created']], how='inner', on='client_id')

这个问题是我最终得到一个比原始 activity_log 更大的表,因为 client_id 在 activity_log 中出现多次,在 user_table 中出现多次。

我想在 user_table 中查找 client_id,获取最早的 user_created 值并将其放入 activity_log 中的 created_date 列。

关于实现此目标我还需要做什么的任何想法?

最佳答案

听起来你想从 usr_df 中获取最早的事件,你可以在按日期排序后使用 groupbyfirst 来做到这一点:

df1 = usr_df.sort_values('user_created', ascending = True).groupby('client_id').first()

df1 看起来像这样:


     user_id    user_created
client_id       
1   asasdsa2    2021-10-12
2   3asdasd21   2021-11-12
3   1asdsaa22   2021-02-12

现在您可以将 act_df 与这个合并:

act_df.merge(df1, on = 'client_id')

输出:

      client_id  activity_date    user_id    user_created
--  -----------  ---------------  ---------  -------------------
 0            1  12/12/2022       asasdsa2   2021-10-12 00:00:00
 1            1  11/12/2022       asasdsa2   2021-10-12 00:00:00
 2            1  9/12/2022        asasdsa2   2021-10-12 00:00:00
 3            1  8/12/2022        asasdsa2   2021-10-12 00:00:00
 4            2  12/12/2022       3asdasd21  2021-11-12 00:00:00
 5            2  11/12/2022       3asdasd21  2021-11-12 00:00:00
 6            3  10/12/2022       1asdsaa22  2021-02-12 00:00:00
 7            3  9/12/2022        1asdsaa22  2021-02-12 00:00:00

关于python - 无需合并的 Pandas 索引匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70955138/

相关文章:

python - 使用 Python 从 Pandas 数据框中的现有日期时间列创建星期几列

python - 将 Pandas DataFrame 与不同列中的键合并

pandas - 如何合并不完整列上的两个数据集?

excel - 关于如何在第二列中的两个值之间组合单元格的更好的解决方案

python - 在 python 中合并两个表(使用 pandas),其中链接取决于唯一性

python - 拓展新式类

python - 根据 bool python 获取数组部分的中位数

python - Django 无法将 'Recipe_instruction' 对象隐式转换为 str

python - 不使用 for 循环追加

python - pandas dataframe,按另一列中的值排名,不使用 Python FOR 循环