gpt4 book ai didi

python - 如何比较 pandas 数据框中第二列的值与第一列的相同值?

转载 作者:行者123 更新时间:2023-11-30 21:55:20 27 4
gpt4 key购买 nike

如何提取数据框中第二列的值并将其与同一数据框中第一列的所有相同值进行比较?

我有一个数据框为“df”:

Name         Datetime
Bob 26-04-2018 12:00:00
Claire 26-04-2018 12:00:00
Bob 26-04-2018 12:30:00
Grace 27-04-2018 08:30:00
Bob 27-04-2018 09:30:00

我想在数据框中添加一个新列作为 df['Id'] ,这样,对于具有相同名称的用户,如果日期时间值的差异不超过 30 分钟,它们将被分配相同的值Id 的值,如果日期时间差大于 30 分钟,则会分配不同的 id。

我认为可以通过迭代循环来实现,但我不知道如何做到这一点。另外,由于我有一个巨大的数据集,有没有更好的方法来做到这一点?

我预期的数据框输出如下:

Name         Datetime                 Id
Bob 26-04-2018 12:00:00 1
Claire 26-04-2018 12:00:00 2
Bob 26-04-2018 12:10:00 1
Bob 26-04-2018 12:20:00 1
Claire 27-04-2018 08:30:00 3
Bob 27-04-2018 09:30:00 4

如有任何帮助,我们将不胜感激。谢谢

最佳答案

我会按名称、日期时间对数据帧进行排序,以识别不同的组,然后按原始数据帧顺序为每个组分配一个 Id 值。

代码可能是:

# sort data frame on Name and datetime
df.sort_values(['Name', 'Datetime'], inplace=True)
df1 = df.shift()
# identify new Ids
df.loc[(df1.Name!=df.Name)
|(df.Datetime-df1.Datetime>pd.Timedelta(minutes=30)), 'tmp'] = 1
del df1 # non longer usefull

# ok, one different tmp value for each group
df['tmp'] = df['tmp'].cumsum().ffill()

# compute Ids in original dataframe orders
ids = pd.DataFrame(df['tmp'].drop_duplicates().sort_index())
ids['Id'] = ids.reset_index(drop=True).index + 1

# and get the expected result
df = df.reset_index().merge(ids, on='tmp').set_index('index').sort_index()\
.drop(columns='tmp').rename_axis(None)

它给出了预期的结果:

     Name            Datetime  Id
0 Bob 2018-04-26 12:00:00 1
1 Claire 2018-04-26 12:00:00 2
2 Bob 2018-04-26 12:10:00 1
3 Bob 2018-04-26 12:20:00 1
4 Claire 2018-04-27 08:30:00 3
5 Bob 2018-04-27 09:30:00 4

关于python - 如何比较 pandas 数据框中第二列的值与第一列的相同值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56960065/

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