首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Python根据开始值和结束值推断时间序列数据?

使用Python根据开始值和结束值推断时间序列数据?
EN

Stack Overflow用户
提问于 2017-10-11 17:56:48
回答 1查看 1.2K关注 0票数 1

我有一个excel表,其值表示时间序列数据的开始和end_time,如下所示。时间只剩几秒了。

代码语言:javascript
运行
复制
+------------+---------+-------+
Start_Time   End_Time  Value
0            2      A
2            3      B
3            9      A
9            11     C

我想推断开始和end_time之间的值,并显示每秒钟的值。

+---------+------+ Time Value 0 A 1 A 2 A 3 B 4 A 5 A 6 A 7 A 8 A 9 A 10 C 11 c

任何在Python中实现它的帮助都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-11 22:08:31

设置

您应该找到如何阅读您的excel表熊猫轻而易举,选项将取决于文件本身,所以我将不涉及这一部分。下面是示例中使用的示例数据的复制。

代码语言:javascript
运行
复制
import pandas as pd

df = pd.DataFrame({'Start_Time': [0, 2, 3, 9],
                   'End_Time': [2, 3, 9, 11],
                   'Value': ['A', 'B', 'A', 'C']})
>>> df
Out[]:
   End_Time  Start_Time Value
0         2           0     A
1         3           2     B
2         9           3     A
3        11           9     C

解决方案

代码语言:javascript
运行
复制
(pd.Series(range(df.End_Time.max() + 1), name='Value')  # Create a series on whole range
   .map(df.set_index('End_Time').Value)                 # Set values from "df"
   .bfill()                                             # Backward fill NaNs values
   .rename_axis('Time'))                                # Purely cosmetic axis rename
Out[]:
Time
0     A
1     A
2     A
3     B
4     A
5     A
6     A
7     A
8     A
9     A
10    C
11    C
Name: Value, dtype: object

演练

创建整个“时间”范围

代码语言:javascript
运行
复制
s = pd.Series(range(df.End_Time.max() + 1))

>>> s
Out[]:
0      0
1      1
2      2
3      3
4      4
5      5
6      6
7      7
8      8
9      9
10    10
11    11
dtype: int32

使用"End_Time“作为df的索引

代码语言:javascript
运行
复制
>>> df.set_index('End_Time')
Out[]:
          Start_Time Value
End_Time
2                  0     A
3                  2     B
9                  3     A
11                 9     C

从End_Time将df值映射到相应的“s”值

代码语言:javascript
运行
复制
s = s.map(df.set_index('End_Time').Value)

>>> s
Out[]:
0     NaN
1     NaN
2       A
3       B
4     NaN
5     NaN
6     NaN
7     NaN
8     NaN
9       A
10    NaN
11      C
dtype: object

向后填充NaN

代码语言:javascript
运行
复制
s = s.bfill()

>>> s
Out[]:
0     A
1     A
2     A
3     B
4     A
5     A
6     A
7     A
8     A
9     A
10    C
11    C
dtype: object

然后,rename_axis('Time')仅重命名序列轴以匹配所需的输出。

请注意,这在这里有效,因为您使用的是(不包括 Start_Time )。如果您使用的是,包括 Start_Time ( Value实际上是从Start_Time开始的,这是比较常见的),那么您应该将End_Time更改为Start_Timebfill()更改为ffill() (前进填充)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46694689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档