如何在一个时间范围内按多列查找重复的行

j_00:

对于下面的示例数据框,我试图获取其中“水果”和“动物”列具有相同值并且 dateTime列的值差不大于10分钟的行,但是我遇到了麻烦最后一步。(有关更多详细信息,选定的行最终将进入单独的df,并从当前行中删除)。

df_test:

    dateTime                fruit   animal  number
1   08/01/2020 1:08:00 AM   apple   monkey  1
2   08/01/2020 1:05:00 AM   apple   monkey  4
3   08/01/2020 1:20:00 AM   apple   frog    3
4   08/01/2020 1:40:00 AM   pear    dog     1
5   08/01/2020 1:47:00 AM   apple   monkey  2

为了得到“水果”和“动物”都匹配的行,我尝试了:

duplicates_df = df_test[df_test.duplicated(['fruit','animal'])]

在将重复项放入重复项df中之后,我无法找到可以用来提取适用于有关dateTime的指定规则的方法的方法。解决这个问题的方法是什么?

Kuldip Chaudhari:

试试这个

from datetime import timedelta
import itertools as itt

def processGroup(G):
    indexes = G.index.to_list()
    groups  = []
    for i1,i2 in itt.combinations(indexes, 2):
        added=False
        if (max(df.dateTime[i1] ,  df.dateTime[i2]) - min(df.dateTime[i1] ,  df.dateTime[i2])).seconds/60 <= 20.0:
            for g in groups:
                if (i1 in g) and (i2 not in g):
                    g.append(i2)
                    added=True
                    break
                elif (i2 in g) and (i1 not in g):
                    g.append(i1)
                    added=True
                    break
                elif (i2 in g) and (i1 in g):
                    added=True
                    break
                    
            if not added:
                groups.append([i1, i2])
                
#     print(groups)
    
    G['Group'] = ''
    result = pd.DataFrame(columns=G.columns.to_list())
    for i, g in enumerate(groups):
        result = pd.concat([result, G.loc[g]])
        result.loc[g, 'Group'] = (i+1)
    
    return result

RESULT = pd.DataFrame(columns=df.columns.to_list()+['Group'])

for i, g in df.groupby(['fruit', 'animal']):
#     print(g)
    RESULT = pd.concat([RESULT, processGroup(g)])
    
print(RESULT.set_index(['fruit', 'animal', 'Group']))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据另一个字段在特定时间范围内查找记录

检查LocalDateTime是否在一个时间范围内

C#擅长如何在使用范围内查找第一个单元格。

检查时间是否在一个时间范围内,还检查用户是否仅给出开始时间或结束时间

Power BI-在另一个记录的时间范围内查找记录

SQL查询以获取在一个时间范围内包含多个实例的值

我如何在熊猫中将三列合并为一个时间戳列

选择在一个时间范围内显示最少n条记录的所有唯一条目

如何修改数据以在另一个时间的特定范围内删除ID

SQL获取一个时间范围内的所有值-以及之前的值

如何安排Windows任务在一个时间范围内每天重复?

比较时间:检查给定时间是否在另一个时间范围内

避免循环:在一个时间范围内定义动作块

确定一个时间范围内SQL代理的预期运行时间

在给定的时间间隔内,一个时间范围有多少小时?

Spark 1.5.2:在一个时间范围内对DataFrame行进行分组

如何设计一个表,记录一个时间范围内的客户状态?

如何从一个范围内生成 3 个不重复的随机数?

计算一个时间在一个日期范围内出现的次数

有没有办法让 worksheetfunction.randbetween 在一个时间范围内工作?

是否有一个 Excel 公式可以返回一个时间范围内的日历月数?

在当前时间范围内绘制另一个时间范围内的指标

如何在laravel中查找上一个日期范围内的数据

在 R 中测试 case 是否在一个时间范围内和一个唯一的 ID

RXJS 显示一个时间范围内的累计结果

如何创建一个变量,该变量是给定时间范围内和按 id 的连续行的总和

如何在 Java 中的一个时间段内循环每个 hh:00?

在一个时间间隔内生成时间戳范围并查询所有重叠事件

如何在一个范围内递归查找 BST 中的节点,并返回完整列表?