pandas 减少Panda中的循环处理时间

k97glaaz  于 2023-02-11  发布在  其他
关注(0)|答案(1)|浏览(137)

概念:计算两个时间之间的转换次数,并将计数作为列添加到数据框中。开始时间和结束时间是数据框中的前两列
采样日期

Time_Completed   Time_of_Fetch   Base    Number of event
        03-06-2022 14:56    03-06-2022 14:14    Q112    12
        03-06-2022 14:54    03-06-2022 14:14    Q112    11
        03-06-2022 14:51    03-06-2022 14:18    Q112    9
        03-06-2022 14:52    03-06-2022 14:21    Q112    8
        03-06-2022 15:07    03-06-2022 14:25    Q112    8
        03-06-2022 14:54    03-06-2022 14:25    Q112    7
        03-06-2022 14:50    03-06-2022 14:25    Q112    5
        03-06-2022 15:11    03-06-2022 14:27    Q112    5
        03-06-2022 15:17    03-06-2022 14:29    Q112    4
        03-06-2022 15:19    03-06-2022 14:47    Q112    3
        03-06-2022 15:18    03-06-2022 14:49    Q112    2
        03-06-2022 15:21    03-06-2022 14:54    Q112    1
        03-06-2022 15:20    03-06-2022 14:58    Q106    2
        03-06-2022 15:23    03-06-2022 14:59    Q106    1

下面是我用来获取Number of Count列的代码

result = []
for i in range(0, len(df)):

   result.append(df[(df['Time_of_Fetch'] >= df.iloc[i]['Time_of_Fetch']) & (df['Time_of_Fetch'] < df.iloc[i]['Time_Completed']) & (df['Base'] == df.iloc[i]['Base'])].count()['Base'])

df['Check_value'] = result

然而,当处理大数据集时,这种方法需要花费一些时间来完成计算
我尝试过使用apply()lambda()来减少运行时间,但仍然无法减少运行时间
下面是我已经厌倦的代码

df_108.assign = df_108.apply((lambda row :df_108[(df_108['Time_of_Fetch'] >= df_108['Time_of_Fetch'])
& (df_108['Time_of_Fetch'] < df_108['Time_Completed'])& (df_108['Base'] == df_108['Base'])].count()['Base']),axis = 1)

如何重写以减少运行时

fafcakar

fafcakar1#

可以使用内部日期时间差运算:

import pandas as pd

# Data
dic = {'d1': ['03-06-2022 14:56', '03-06-2022 14:54', '03-06-2022 14:51'], 
       'd2': ['03-06-2022 14:14', '03-06-2022 14:14', '03-06-2022 14:18']}
df = pd.DataFrame.from_dict(data = dic)

# Datetime diference
time_format = '%d-%m-%Y %H:%M'
df['diff'] = (pd.to_datetime(arg=df['d1'], format=time_format) - pd.to_datetime(arg=df['d2'], format=time_format))

print(df)

生成的输出:

d1                d2            diff
0  03-06-2022 14:56  03-06-2022 14:14 0 days 00:42:00
1  03-06-2022 14:54  03-06-2022 14:14 0 days 00:40:00
2  03-06-2022 14:51  03-06-2022 14:18 0 days 00:33:00

相关问题