python 3 pandas数据帧的迭代以外的条件和技术

kdbaseball8

我正在继续提高我的熊猫技能,并遇到了一些难题。此问题涉及两个数据帧df1和df2。df1包含事件时间和每个事件的相应详细信息。df2包含由开始时间和停止时间确定的时间段。

目标:

  1. 按时间段对所有事件进行分组。
  2. 检查计数在该时间段内是否在增加,以及该时间段内所有代码是否相同
  3. 在df2中创建一个新列,如果第2部分中的两个部件都为True,则返回True,否则为True,否则在此期间没有任何事件。

码:

import pandas as pd
    
df1 = {'Event':  ['2020-12-01 00:10:22', '2020-12-01 00:15:11','2020-12-01 00:18:00',
                  '2020-12-01 00:31:00', '2020-12-01 00:54:00' , '2020-12-01 01:01:00' ,
                  '2020-12-01 01:19:00' , '2020-12-01 01:23:00' , '2020-12-01 01:24:00' ,
                  '2020-12-01 01:56:00' , '2020-12-01 21:02:00', '2020-12-01 02:41:00', 
                  '2020-12-01 02:44:00' , '2020-12-01 03:19:00' ,'2020-12-01 03:22:00' , 
                  '2020-12-01 03:49:00' , '2020-12-01 05:24:00' ,'2020-12-01 05:56:00' , 
                  '2020-12-01 08:02:00'
                   ] , 
       'Count' : [1 , 2 , 4 , 2 , 5 , 
                  3 , 7 , 9 , 10 , 1 , 
                  2 , 5 , 6 , 10 , 5 , 
                  6 ,7 , 8 , 3] ,
      'Code' : ['A' , 'A' , 'A' , 'A' , 'B' , 
                'B' , 'B' , 'B' , 'B' , 'B' , 
                'C' , 'C' , 'C' , 'C' , 'C' , 
                'D' , 'D' , 'D' , 'D']
        }

df1 = pd.DataFrame(df1 , columns = ['Event' , 'Count' , 'Code'])

df1['Event'] = pd.to_datetime(df1['Event'])

df

    Event   Count   Code
0   2020-12-01 00:10:22     1   A
1   2020-12-01 00:15:11     2   A
2   2020-12-01 00:18:00     4   A
3   2020-12-01 00:31:00     2   A
4   2020-12-01 00:54:00     5   B
5   2020-12-01 01:01:00     3   B
6   2020-12-01 01:19:00     7   B
7   2020-12-01 01:23:00     9   B
8   2020-12-01 01:24:00     10  B
9   2020-12-01 01:56:00     1   B
10  2020-12-01 21:02:00     2   C
11  2020-12-01 02:41:00     5   C
12  2020-12-01 02:44:00     6   C
13  2020-12-01 03:19:00     10  C
14  2020-12-01 03:22:00     5   C
15  2020-12-01 03:49:00     6   D
16  2020-12-01 05:24:00     7   D
17  2020-12-01 05:56:00     8   D
18  2020-12-01 08:02:00     3   D

创建df2代码:

df2 = {'Start Time' : ['2020-12-01 00:00:00', '2020-12-01 00:30:00','2020-12-01 01:30:00',
                    '2020-12-01 02:30:00', '2020-12-01 03:30:00' , '2020-12-01 04:30:00' ,
                    '2020-12-01 05:30:00' , '2020-12-01 07:30:00' , '2020-12-01 10:30:00' ,
                    '2020-12-01 15:00:00' , '2020-12-02 21:00:00'] ,
       'End Time' : ['2020-12-01 00:30:00', '2020-12-01 01:30:00','2020-12-01 02:30:00',
                    '2020-12-01 03:30:00', '2020-12-01 04:30:00' , '2020-12-01 05:30:00' ,
                    '2020-12-01 07:30:00' , '2020-12-01 10:30:00' , '2020-12-01 15:00:00' ,
                    '2020-12-01 21:00:00' , '2020-12-02 00:00:00']
       
        }

df2 = pd.DataFrame(df2 , columns = ['Start Time' , 'End Time'])

df2['Start Time'] = pd.to_datetime(df2['Start Time'])
df2['End Time'] = pd.to_datetime(df2['End Time'])

df2

    Start Time  End Time
0   2020-12-01 00:00:00     2020-12-01 00:30:00
1   2020-12-01 00:30:00     2020-12-01 01:30:00
2   2020-12-01 01:30:00     2020-12-01 02:30:00
3   2020-12-01 02:30:00     2020-12-01 03:30:00
4   2020-12-01 03:30:00     2020-12-01 04:30:00
5   2020-12-01 04:30:00     2020-12-01 05:30:00
6   2020-12-01 05:30:00     2020-12-01 07:30:00
7   2020-12-01 07:30:00     2020-12-01 10:30:00
8   2020-12-01 10:30:00     2020-12-01 15:00:00
9   2020-12-01 15:00:00     2020-12-01 21:00:00
10  2020-12-01 21:00:00     2020-12-02 00:00:00

战略:

我的策略是使用pd.Dataframe.between_time,然后使用lambda函数进行条件语句检查,但我似乎无法使其工作。

以下是所需的输出:

    Start Time  End Time    Test
0   2020-12-01 00:00:00     2020-12-01 00:30:00     True
1   2020-12-01 00:30:00     2020-12-01 01:30:00     False
2   2020-12-01 01:30:00     2020-12-01 02:30:00     True
3   2020-12-01 02:30:00     2020-12-01 03:30:00     False
4   2020-12-01 03:30:00     2020-12-01 04:30:00     True
5   2020-12-01 04:30:00     2020-12-01 05:30:00     True
6   2020-12-01 05:30:00     2020-12-01 07:30:00     True
7   2020-12-01 07:30:00     2020-12-01 10:30:00     True
8   2020-12-01 10:30:00     2020-12-01 15:00:00     False
9   2020-12-01 15:00:00     2020-12-01 21:00:00     False
10  2020-12-02 21:00:00     2020-12-02 00:00:00     False
Shubham Sharma

您可以使用根据指定条件产生布尔值的自定义函数。在这里,我们用于Series.is_monotonic_increasing检查是否Count递增,并且Series.nunique在给定时间段内检查所有代码是否相同:

def f():
    for x, y in df2.to_numpy():
        s = df1[df1['Event'].between(x, y)]
        yield s['Count'].is_monotonic_increasing & s['Code'].nunique() == 1

df2['Test'] = list(f())

结果:

            Start Time            End Time   Test
0  2020-12-01 00:00:00 2020-12-01 00:30:00   True
1  2020-12-01 00:30:00 2020-12-01 01:30:00  False
2  2020-12-01 01:30:00 2020-12-01 02:30:00   True
3  2020-12-01 02:30:00 2020-12-01 03:30:00  False
4  2020-12-01 03:30:00 2020-12-01 04:30:00   True
5  2020-12-01 04:30:00 2020-12-01 05:30:00   True
6  2020-12-01 05:30:00 2020-12-01 07:30:00   True
7  2020-12-01 07:30:00 2020-12-01 10:30:00   True
8  2020-12-01 10:30:00 2020-12-01 15:00:00  False
9  2020-12-01 15:00:00 2020-12-01 21:00:00  False
10 2020-12-02 21:00:00 2020-12-02 00:00:00  False

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python pandas:迭代多个数据帧

来自分类Dev

Python Pandas:使用公共列将具有字符串、数字和 NaN 值的 3 个数据帧分组到新数据帧

来自分类Dev

python字典迭代用于多种条件的数据帧过滤

来自分类Dev

python pandas中的迭代和条件

来自分类Dev

Python:跨数据帧迭代

来自分类Dev

Python 3 if not 条件简化

来自分类Dev

如何在彼此之上堆叠数据帧(Pandas,Python3)

来自分类Dev

两个数据帧的公共列中值的交集 - Pandas,Python3

来自分类Dev

如何从数据帧python3中获取特定列的Pandas中的用户输入

来自分类Dev

在python中,如何为3个或更多数据帧计算MAX和MIN

来自分类Dev

在多种条件下合并熊猫数据帧(python / pandas)

来自分类Dev

Python/Pandas - 使用条件从 JSON 更新数据帧

来自分类Dev

Python Pandas:在多种条件下合并数据帧

来自分类Dev

Python 3中的迭代器

来自分类Dev

Boost Python 3 迭代 dict

来自分类Dev

Python 3和Sybase等数据库

来自分类Dev

pandas 将 3 个数据帧元素迭代为一个函数

来自分类Dev

将数据帧上传到s3 python

来自分类Dev

如何从 Python 中的 3 列数据帧创建矩阵

来自分类Dev

如何计算python3数据帧中列的频率

来自分类Dev

将数据帧保存到 csv 文件 Python 3

来自分类Dev

Python 3-Zip是熊猫数据框中的迭代器

来自分类Dev

基于其他列 Python 3+ Pandas 数据框上的条件的年份 cumsum

来自分类Dev

python 3 pandas系列索引?

来自分类Dev

Python 3提取HTML数据

来自分类Dev

Python 3 html 表格数据

来自分类Dev

Python3 数据输入

来自分类Dev

Python3和熊猫

来自分类Dev

OWSLib和python3