gpt4 book ai didi

python - Pandas 将第二个最小值分配给列

转载 作者:行者123 更新时间:2023-11-28 18:05:08 25 4
gpt4 key购买 nike

一直坚持使用 Pandas 。我有 df,其中包含每笔交易(第一列 - 索引,按时间排序):

        email    date
43487 aaa 2017-10-11 08:28:39
42910 bbb 2017-09-24 07:49:52
45561 bbb 2017-12-03 11:03:56
47212 bbb 2018-01-02 12:25:52
89734 ccc 2018-02-02 12:25:52
89734 ccc 2018-03-02 12:20:52

我还有 df2,它包含唯一的电子邮件和最小日期(df1 带有 drop_duplicates,因为它是按时间排序的,我默认得到最小日期):

        email    date
43487 aaa 2017-10-11 08:28:39
42910 bbb 2017-09-24 07:49:52
89734 ccc 2018-02-02 12:25:52

如何在 df2 中创建列 date2,包含 df1 中相应电子邮件的第二个最小日期?

我尝试了 for 循环:

for email in df2['email']:
df2.at[email, 'date2'] = df1.loc[df1['email'] == email]['date'].iloc[1]
if len(df1.loc[df1['email'] == email]['date']) > 1 else None

但它很长(55k 行和 32 GB RAM - 5 分钟内没有结果)。

期望的输出是:

        email   date                date 2
43487 aaa 2017-10-11 08:28:39 None
42910 bbb 2017-09-24 07:49:52 2017-12-03 11:03:56
89734 ccc 2018-02-02 12:25:52 2018-03-02 12:20:52

最佳答案

你可以使用 sort_values对每个 email 中的 date 进行排序,这可以使用列列表来排序。

然后您GroupBy 发送电子邮件 并使用nth选择每个组的第二个元素。

date2 = df.sort_values(['email','date']).groupby('email').nth(1)

date
email
bbb 2017-12-03 11:03:56
ccc 2018-03-02 12:20:52

最后在 email 上与 df2 合并:

df2.merge(date2, on = 'email', how = 'left')

email date_x date_y
0 aaa 2017-10-11 08:28:39 NaT
1 bbb 2017-09-24 07:49:52 2017-12-03 11:03:56
2 ccc 2018-02-02 12:25:52 2018-03-02 12:20:52

关于python - Pandas 将第二个最小值分配给列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53942211/

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