【发布时间】:2018-03-03 22:22:03
【问题描述】:
我想在数据框中指出温度是否降至 15°C 以下。如何更高效?
df['Was cold'] = df['Temperature']<15
df['Jacket needed'] = False
for i in range(len(df)-8):
df.iloc[i].loc['Jacked needed'] = df.iloc[i:(i+8)]['Was cold'].any()
数据按时间排序,每条记录代表一个小时。 df['Was cold'] 表示温度是否低于 15°C。 df['Jacket needed'] 表示在接下来的 8 小时内至少有一个天气寒冷,如果我必须出去,我需要一件夹克。
【问题讨论】:
-
最好解释一下最后 3 行代码在做什么。很明显它不仅仅是一个简单的布尔掩码,所以请解释一下你在做什么。为什么是 i + 8?
-
现在好点了吗?
-
可能有助于提供样本输入和所需的输出......在这种情况下,不完全遵循“在接下来的 8 小时内最后一个冷时”的含义。
-
只是想知道你是否在追求类似
df['jacket'] = (df['Temperature'] < 15).replace({False: None}).ffill(limit=8).... -
我认为 OP 想要检查
df.Temperature是否在 8 个时间步长的前向窗口中的任何位置下降到 15 以下。所以我猜实际上限制 7 的 bfill 会起作用吗? ://
标签: python pandas aggregation