python - Pandas 创建时间序列并将其提取到新数据帧
问题描述
具有以下简化的数据框:
Date Name Score V H M
2018-01-01 A 5 V1 H4 M6
2018-01-01 B 3 V5 H2 M1
2018-01-01 C 4 V7 H6 M6
2018-01-01 A 4 V11 H9 M3
2018-01-01 C 2 V4 H2 M18
2018-01-02 A 4 V9 H1 M9
2018-01-02 B 1 V15 H4 M10
2018-01-02 A 3 V10 H10 M14
2018-01-03 C 5 V5 H21 M34
2018-01-04 A 3 V8 H9 M6
2018-01-04 A 4 V4 H15 M9
2018-01-04 C 2 V2 H4 M14
2018-01-04 B 5 V1 H1 M2
将上述数据框视为原始集,我进一步按日期对其进行索引,并按月重新采样。我最终想做的是为列(名称、V、H、M)中与分数相关的唯一值创建单独的时间序列(通过分组完成)。虽然我已经进行了下采样,但我预计这些列的分组唯一值中的时间序列大小不规则,并计划进行插值以处理该问题。
目标是创建多个时间序列并将其提取到一个新的数据帧中,并探索它们的相关图。例如,我将有 V1、V2、...、Vn、H1、H2、...、Hn、M1、M2、...、Mn 等的单独时间序列。
我不确定这是否应该全部捕获在一个新数据帧或基于分组的多个数据帧中。以下是时间序列输出的示例:
Date Score
V1 2018-01-01 4.5
2018-02-01 4.1
2018-03-01 4.3
2018-04-01 4.2
2018-05-01 4.4
Date Score
V2 2018-01-01 4.5
2018-02-01 4.1
2018-03-01 4.3
2018-04-01 4.2
2018-05-01 4.4
Date Score
V3 2018-01-01 4.5
2018-02-01 4.1
2018-03-01 4.3
2018-04-01 4.2
2018-05-01 4.4
我需要帮助来实施一种有效的方法来做到这一点,并知道我是否走在正确的轨道上。上面的数据框是更大数据集的简化版本。
感谢任何帮助和指导。
解决方案
您可以使用concat
将列名称、V、H、M 移动到彼此下方。之后,您可以使用 填充分数tile
。最后,您可以申请resample
,mean
和interpolate
以下组:
import numpy as np
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
df2 = pd.concat([df.Name, df.V, df.H, df.M]).to_frame(name='Name')
df2['Score'] = np.tile(df['Score'].values,4)
df2.groupby('Name').apply(lambda x: x.resample('M').mean().interpolate())
推荐阅读
- android - 索引 1 处的非法字符 <:>:\:PayPalDataCollector\build\libs\META-INF\MANIFEST.MF
- python-3.x - 指定 Python 3 不干预新行?
- google-data-studio - Google Data Studio:日期范围内第一个值和最后一个值之间的公式差异?
- r - 渲染绘图列表时出现 renderPlot 问题
- javascript - 变量范围冲突Js
- javascript - JS/Regex 匹配方式比它应该的要多
- java - 关闭时重定向到另一个窗口
- vba - VBA SUM 函数用于第 n 行中的多个值
- swift - Swift 测试传递参数
- matlab - 创建具有相同行但每个重复不同次数的新表的有效方法