我正在使用 Pandas 和 Altair 做一些图表。在将 DataFrame 传递给 Altair 之前,我想要重新采样时间序列数据的选项。我有这个工作,但它创建了 Altair 无法使用的分层数据框对象,所以我试图将数据展平回原始格式。我已经尝试了一大堆似乎几乎可以解决此问题的方法,但我不能完全正确。
初始数据是一个 csv,其中包含一堆包含新闻术语的术语、分数和时间戳的行:
james comey,0.00,1524207600
congress,0.00,1524207600
meme,0.17,1524207600
video,0.38,1524207600
barbara bush,2.01,1524207600
trump,2.98,1524207600
...
james comey,0.00,1524211200
congress,0.00,1524211200
meme,0.17,1524211200
video,0.51,1524211200
barbara bush,2.01,1524211200
然后用 pandas 解析:
import pandas as pd
from datetime import datetime
def dateparse(timestamp):
return datetime.fromtimestamp(int(timestamp))
data = pd.read_csv("data.csv",
parse_dates=[2],
date_parser=dateparse,
names=["term", "score", "timestamp"],
header=None)
从那里我们进行重新采样:
x = data.groupby(['term']).resample('24h', on='timestamp').mean()
这会产生:
score
term timestamp
barbara bush 2018-04-20 2.499167
2018-04-21 5.109167
2018-04-22 4.030000
2018-04-23 1.518333
2018-04-24 1.120000
congress 2018-04-20 0.035000
2018-04-21 0.005833
2018-04-22 0.046667
2018-04-23 0.028333
2018-04-24 0.000000
...
到目前为止看起来不错。(有点?我认为score
是唯一的列,但数据看起来几乎是正确的。)现在我想要重新排列它,使其恢复为原始格式,例如:
term timestamp score
barbara bush 2018-04-20 2.499167
barbara bush 2018-04-21 5.109167
barbara bush 2018-04-22 4.030000
barbara bush 2018-04-23 1.518333
barbara bush 2018-04-24 1.120000
congress 2018-04-20 0.035000
congress 2018-04-21 0.005833
congress 2018-04-22 0.046667
我已经尝试过拆垛、熔化、旋转、swap_level/reorder_level(那些看起来几乎不错!)并且该死的靠近我在文档中可以找到的任何其他东西,但我运气不佳。
想法?