【发布时间】:2021-11-10 19:43:58
【问题描述】:
我有一个像这样的数据框:
days1 = pd.date_range('2020-01-01 01:00:00','2020-01-01 01:19:00',freq='60s')
DF = pd.DataFrame({'Time': days1,
'TimeSeries1': [10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20],
'TimeSeries2': [11, 12, 13, 12, 11, 14, 15, 16, 21, 20, 20, 23, 15, 15, 15, 15, 15, 15, 15, 15]})
我想得到以下内容:
- 对于每个 TimeSeries 列(TimeSeries1 和 TimeSeries2),我想创建一个对应的“_Filtered”列,即: TimeSeries1_Filtered[i] = (1-A)* TimeSeries1_Filtered[i-1] + A*TimeSeries1[i]
作为“A”是介于 0 和 1 之间的过滤因子。
-
对于每一列,我需要使用不同的“A”因子。例如:A1=0.5 表示 TimeSeries1,A2=0.8 表示 TimeSeries1。
-
我有 100 多个“TimeSeriesN”列,因此最好以元组或列表的形式传递“A#”参数。
A1=0.5 的示例
Time TimeSeries1 TimeSeries1_Filtered
0 2020-01-01 01:00:00 10 10
1 2020-01-01 01:01:00 10 10
2 2020-01-01 01:02:00 10 10
3 2020-01-01 01:03:00 20 15
4 2020-01-01 01:04:00 20 17.5
5 2020-01-01 01:05:00 20 18.75
6 2020-01-01 01:06:00 20 19.375
7 2020-01-01 01:07:00 20 19.6875
8 2020-01-01 01:08:00 20 19.84375
9 2020-01-01 01:09:00 20 19.92188
10 2020-01-01 01:10:00 20 19.96094
11 ... ... ...
谢谢!
编辑:修正过滤器符号和方程。感谢@not_speshal 的提醒。
【问题讨论】:
-
什么是(An-1)?您是说 (1-An) 吗?
-
根据您的公式,“TimeSeries1_Filtered”的第一个值应该是:(10-1)(0.5-1) + 10(0.5),即:0.5,但第一行有 10 个。
-
@Muhammadhassan - 我认为 OP 的意思是
filtered[n] = (1-A)*filtered[n-1] + A*timeseries[n]。这是给我过滤值的唯一公式 -
@not_speshal 是的,看起来不错。
-
你能解释一下为什么
'TimeSeries1_Filtered'的第一个值是10而不是5吗?你假设TimeSeries1_Filtered[-1]的值是多少?
标签: python pandas dataframe time-series filtering