我有一个excel表,其值表示时间序列数据的开始和end_time,如下所示。时间只剩几秒了。
+------------+---------+-------+
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中实现它的帮助都将不胜感激。谢谢。
发布于 2017-10-11 22:08:31
设置
您应该找到如何阅读您的excel表熊猫轻而易举,选项将取决于文件本身,所以我将不涉及这一部分。下面是示例中使用的示例数据的复制。
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
解决方案
(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
演练
创建整个“时间”范围
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
的索引
>>> 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
”值
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
值
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_Time
,bfill()
更改为ffill()
(前进填充)。
https://stackoverflow.com/questions/46694689
复制相似问题