在 Pandas 中的预定义窗口内循环

问题描述 投票:0回答:1

我有一个在窗口中划分的数据集:

data_new_pd = (
  data_pd
  .filter(col('x') > 1)  
  .filter(col('x') < 21)  
  .withColumn('row', row_number().over(Window.partitionBy('a', 'b').orderBy('timestamp')))
  .filter(col('row') == 1)
  .toPandas()
)

分区的窗户长度不一样。

现在我想在上面看到的定义窗口上添加以下循环

# Make a new column
data_new_pd["temp_filter"] = 0

# Keep the latest value of the temperature column when column 'overshoot' = 0
last_temperature = None
for index, row in data_new_pd.iterrows():
    if row["overshoot"] == 0:
        last_temperature = row["temperature"]
    data_new_pd.at[index, "temp_filter"] = last_temperature

我尝试添加具有某些条件的新列,但它没有给我正确的结果。

pandas for-loop pyspark data-analysis
1个回答
0
投票

如果我理解正确的话,你想要超调为零的最后一个温度。我会使用

mask
ffill
,也可以选择使用
fillna
:

data_new_pd['temp_filter'] = (data_new_pd['temperature']
                              .where(data_new_pd['overshoot'].eq(0))
                              .ffill()
                              .fillna(0)
                             )
© www.soinside.com 2019 - 2024. All rights reserved.