规范化频率并将 Dataframe 中的多个 TimeSeries 扩展到给定日期
Normalize the frequency and extend multiple TimeSeries in a Dataframe to a given date
我在 Dataframe
中有多个每月 timeseries
。
为了进行动态可视化,我需要每月对它们进行重新采样,并为所有这些对象设置相同的结束日期。
import pandas as pd
evolution = [{'date': '2017-09-01', 'Name': 'A', 'Value': 200},
{'date': '2017-12-10', 'Name': 'A', 'Value': 400},
{'date': '2017-09-01', 'Name': 'B', 'Value': 200},
{'date': '2018-01-20', 'Name': 'B', 'Value': 600},
]
df = pd.DataFrame(evolution)
df
Out[57]:
Name Value date
0 A 200 2017-09-01
1 A 400 2017-12-10
2 B 200 2017-09-01
3 B 600 2018-01-20
我重新采样以获得标准化 index/frequency:
df.index = pd.DatetimeIndex(df['date'])
df = df.groupby(['Name']).resample('M').max()
df = df.drop(['date', 'Name'], axis=1)
df = df.interpolate(method='linear')
df
Out[58]:
Value
Name date
A 2017-09-30 200.000000
2017-10-31 266.666667
2017-11-30 333.333333
2017-12-31 400.000000
B 2017-09-30 200.000000
2017-10-31 300.000000
2017-11-30 400.000000
2017-12-31 500.000000
2018-01-31 600.000000
但是据此,我不知道如何扩展 A 的 DateTimeIndex 以获得:
Value
Name date
A 2017-09-30 200.000000
2017-10-31 266.666667
2017-11-30 333.333333
2017-12-31 400.000000
2018-01-31 400.000000 <=== Extended Index
B 2017-09-30 200.000000
...
2018-01-31 600.000000
我认为你需要:
print (df.unstack().ffill(axis=1).stack())
Value
Name date
A 2017-09-30 200.000000
2017-10-31 266.666667
2017-11-30 333.333333
2017-12-31 400.000000
2018-01-31 400.000000
B 2017-09-30 200.000000
2017-10-31 300.000000
2017-11-30 400.000000
2017-12-31 500.000000
2018-01-31 600.000000
我在 Dataframe
中有多个每月 timeseries
。
为了进行动态可视化,我需要每月对它们进行重新采样,并为所有这些对象设置相同的结束日期。
import pandas as pd
evolution = [{'date': '2017-09-01', 'Name': 'A', 'Value': 200},
{'date': '2017-12-10', 'Name': 'A', 'Value': 400},
{'date': '2017-09-01', 'Name': 'B', 'Value': 200},
{'date': '2018-01-20', 'Name': 'B', 'Value': 600},
]
df = pd.DataFrame(evolution)
df
Out[57]:
Name Value date
0 A 200 2017-09-01
1 A 400 2017-12-10
2 B 200 2017-09-01
3 B 600 2018-01-20
我重新采样以获得标准化 index/frequency:
df.index = pd.DatetimeIndex(df['date'])
df = df.groupby(['Name']).resample('M').max()
df = df.drop(['date', 'Name'], axis=1)
df = df.interpolate(method='linear')
df
Out[58]:
Value
Name date
A 2017-09-30 200.000000
2017-10-31 266.666667
2017-11-30 333.333333
2017-12-31 400.000000
B 2017-09-30 200.000000
2017-10-31 300.000000
2017-11-30 400.000000
2017-12-31 500.000000
2018-01-31 600.000000
但是据此,我不知道如何扩展 A 的 DateTimeIndex 以获得:
Value
Name date
A 2017-09-30 200.000000
2017-10-31 266.666667
2017-11-30 333.333333
2017-12-31 400.000000
2018-01-31 400.000000 <=== Extended Index
B 2017-09-30 200.000000
...
2018-01-31 600.000000
我认为你需要:
print (df.unstack().ffill(axis=1).stack())
Value
Name date
A 2017-09-30 200.000000
2017-10-31 266.666667
2017-11-30 333.333333
2017-12-31 400.000000
2018-01-31 400.000000
B 2017-09-30 200.000000
2017-10-31 300.000000
2017-11-30 400.000000
2017-12-31 500.000000
2018-01-31 600.000000