我一直面临着过滤列中值的问题。我有一个数据框(数据),看起来像下面的那个。
Index Value
2019-11-22 00:00:00 0.0
2019-11-22 00:05:00 1.0
2019-11-22 00:10:00 2.0
2019-11-22 00:15:00 3.0
2019-11-22 00:20:00 4.0
2019-11-22 00:25:00 5.0
2019-11-22 00:30:00 6.0
2019-11-22 00:35:00 7.0
2019-11-22 00:40:00 8.0
2019-11-22 00:45:00 0.0
2019-11-22 00:50:00 0.0
2019-11-22 00:55:00 1.0
2019-11-22 01:00:00 2.0
2019-11-22 01:05:00 3.0
2019-11-22 01:10:00 4.0
2019-11-22 01:15:00 5.0
我想保留一系列大于5的值,并希望将所有其他值分配为零。例如,如果值是1-5,则应将5之前的所有先前值设置为零,如果有8行的值是1-8,则代码应保持原样,最终输出应为以下。
Index Value
2019-11-22 00:00:00 0.0
2019-11-22 00:05:00 1.0
2019-11-22 00:10:00 2.0
2019-11-22 00:15:00 3.0
2019-11-22 00:20:00 4.0
2019-11-22 00:25:00 5.0
2019-11-22 00:30:00 6.0
2019-11-22 00:35:00 7.0
2019-11-22 00:40:00 8.0
2019-11-22 00:45:00 0.0
2019-11-22 00:50:00 0.0
2019-11-22 00:55:00 0.0
2019-11-22 01:00:00 0.0
2019-11-22 01:05:00 0.0
2019-11-22 01:10:00 0.0
2019-11-22 01:15:00 0.0
当我尝试
data[data<5]=0
它只会返回大于5的值。对此,任何帮助都会很大。
答案 0 :(得分:0)
尝试一下:
filter = data["Value"][data["Value"] > 5]
indices_with_6 = filter[filter == 6].index
for idx in indices_with_6:
filter[idx - 5: idx] = [1., 2., 3., 4., 5.]
filter.fillna(0.)
答案 1 :(得分:0)
让我们尝试一下:
df = pd.read_clipboard(index_col=0, sep='\s\s+')
df.index = pd.to_datetime(df.index)
grp = df['Value'].diff().lt(0).cumsum()
df_out = df.where(df.groupby(grp)['Value'].transform('max').gt(5), 0)
print(df_out)
输出:
Value
Index
2019-11-22 00:00:00 0.0
2019-11-22 00:05:00 1.0
2019-11-22 00:10:00 2.0
2019-11-22 00:15:00 3.0
2019-11-22 00:20:00 4.0
2019-11-22 00:25:00 5.0
2019-11-22 00:30:00 6.0
2019-11-22 00:35:00 7.0
2019-11-22 00:40:00 8.0
2019-11-22 00:45:00 0.0
2019-11-22 00:50:00 0.0
2019-11-22 00:55:00 0.0
2019-11-22 01:00:00 0.0
2019-11-22 01:05:00 0.0
2019-11-22 01:10:00 0.0
2019-11-22 01:15:00 0.0