【问题标题】:Write if else loop in simple way to reduce time complexity以简单的方式编写 if else 循环以降低时间复杂度
【发布时间】:2021-02-17 10:03:21
【问题描述】:

我有以下代码

for i in range(index, len(df_2)+1):
  if df_2.loc[i, 'Duration'] == 0:
       df_2.loc[i, 'Duration'] = df_2.loc[i, "idle_hrs"] + df_2.loc[i - 1, "Duration"]

我怎样才能以简单的方式编写这个来降低时间复杂度?以列表理解的方式编写它是否存在战争?

【问题讨论】:

  • 请提供一个最小的验证示例。持续时间 = [0 1 0 0 3 ] 和 idle_hrs = [3 2 3 1 3] 的输出是什么?
  • 应该可以通过使用shift 对其进行矢量化。但如果没有可复制示例输入数据和预期输出,我不会尝试回答......

标签: python dataframe loops if-statement


【解决方案1】:

您可以使用shift进行累积。

import pandas as pd

index = 2
df = pd.DataFrame({'Duration': [1,0,2,0], 'idle_hrs': [10,20,30,40]})

df
Duration  idle_hrs
0         1        10
1         0        20
2         2        30
3         0        40

start_df = df[:index]
df.loc[df['Duration'] == 0, 'Duration'] = df['idle_hrs'] + df['Duration'].shift(1)
df.iloc[:index] = start_df

df
Duration  idle_hrs
0       1.0        10
1       0.0        20
2       2.0        30
3      42.0        40

【讨论】:

    猜你喜欢
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多