Python Panda dataframe使用多索引重新采样timeseries索引
我有一组数据,如何将其时间戳重采样为1秒间隔,并用0填充数据列(而不是“UUT”) 输出如下内容:Python Panda dataframe使用多索引重新采样timeseries索引,python,pandas,dataframe,time-series,Python,Pandas,Dataframe,Time Series,我有一组数据,如何将其时间戳重采样为1秒间隔,并用0填充数据列(而不是“UUT”) 输出如下内容: UUT Sent Received Latency(ms) Sum DateTime 2018-01-25 15:03:05 uut-1 1 1 427 2 2018-01-25 15:03:0
UUT Sent Received Latency(ms) Sum
DateTime
2018-01-25 15:03:05 uut-1 1 1 427 2
2018-01-25 15:03:05 uut-2 1 1 664 2
2018-01-25 15:03:06 uut-1 0 0 0 0
2018-01-25 15:03:06 uut-2 0 0 0 0
2018-01-25 15:03:07 uut-1 0 0 0 0
2018-01-25 15:03:07 uut-2 0 0 0 0
2018-01-25 15:03:08 uut-1 0 0 0 0
2018-01-25 15:03:08 uut-2 0 0 0 0
....
2018-01-25 15:03:17 uut-1 1 1 637 2
2018-01-25 15:03:17 uut-2 1 1 1229 2
2018-01-25 15:03:18 uut-1 0 0 0 0
2018-01-25 15:03:18 uut-2 0 0 0 0
.....
grouped.get_group('uut1')
second a b
first
2018-01-25 15:03:05 uut1 1 1
2018-01-25 15:03:06 uut1 0 0
2018-01-25 15:03:07 uut1 0 0
2018-01-25 15:03:08 uut1 0 0
...
2018-01-25 15:03:27 uut1 0 0
2018-01-25 15:03:28 uut1 0 0
2018-01-25 15:03:29 uut1 5 5
最终目标是使用groupby(“UUT”)绘制每个UUT的时间与任何其他剩余列(例如“发送”、“接收”、“延迟(毫秒)”)这并不整洁,但您可以使用以下代码完成您想要的事情
1。复制
idx=['2018-01-25 15:03:05','2018-01-25 15:03:05','2018-01-25 15:03:17','2018-01-25 15:03:17','2018-01-25 15:03:29','2018-01-25 15:03:29']
dt=pd.DatetimeIndex(idx)
数组=[
dt,
['uut1','uut2','uut1','uut2','uut1','uut2']
]
元组=列表(zip(*数组))
index=pd.MultiIndex.from_元组(元组,名称=['first','second'])
data=pd.DataFrame({
“a”:范围(1,7),
“b”:范围(1,7)},
索引=索引)
2。操纵
data\u=data.reset\u索引(“秒”)
第二,数据中的df_gb被操纵。groupby('second'):
vars()['df_{}.format(second)]=df_gb.resample('1s').first().fillna(0)
df_uut1['second']='uut1'
df_uut2['second']='uut2'
3。结果
这是你想做的吗?同样,代码本身不那么可读。不过,我想你可以自己做得更好。这并不整洁,但你可以用下面的代码做你想做的事情
1。复制
idx=['2018-01-25 15:03:05','2018-01-25 15:03:05','2018-01-25 15:03:17','2018-01-25 15:03:17','2018-01-25 15:03:29','2018-01-25 15:03:29']
dt=pd.DatetimeIndex(idx)
数组=[
dt,
['uut1','uut2','uut1','uut2','uut1','uut2']
]
元组=列表(zip(*数组))
index=pd.MultiIndex.from_元组(元组,名称=['first','second'])
data=pd.DataFrame({
“a”:范围(1,7),
“b”:范围(1,7)},
索引=索引)
2。操纵
data\u=data.reset\u索引(“秒”)
第二,数据中的df_gb被操纵。groupby('second'):
vars()['df_{}.format(second)]=df_gb.resample('1s').first().fillna(0)
df_uut1['second']='uut1'
df_uut2['second']='uut2'
3。结果
这是你想做的吗?同样,代码本身不那么可读。我想你可以自己做得更好。我最后使用了重新采样
data2 = data.reset_index(level=[1])
second a b
first
2018-01-25 15:03:05 uut1 1 1
2018-01-25 15:03:05 uut2 2 2
2018-01-25 15:03:17 uut1 3 3
2018-01-25 15:03:17 uut2 4 4
2018-01-25 15:03:29 uut1 5 5
2018-01-25 15:03:29 uut2 6 6
然后是群比
grouped = data2.groupby('second')
<pandas.core.groupby.DataFrameGroupBy object at 0x0000000005AB6E48>
# the groupby dataframe looks something like this:
grouped.get_group('uut1')
second a b
first
2018-01-25 15:03:05 uut1 1 1
2018-01-25 15:03:17 uut1 3 3
2018-01-25 15:03:29 uut1 5 5
最后,将秒中的所有“0”项替换为“uut1”
分组的_df['second']='uut1'
最后的数据帧如下所示:
UUT Sent Received Latency(ms) Sum
DateTime
2018-01-25 15:03:05 uut-1 1 1 427 2
2018-01-25 15:03:05 uut-2 1 1 664 2
2018-01-25 15:03:06 uut-1 0 0 0 0
2018-01-25 15:03:06 uut-2 0 0 0 0
2018-01-25 15:03:07 uut-1 0 0 0 0
2018-01-25 15:03:07 uut-2 0 0 0 0
2018-01-25 15:03:08 uut-1 0 0 0 0
2018-01-25 15:03:08 uut-2 0 0 0 0
....
2018-01-25 15:03:17 uut-1 1 1 637 2
2018-01-25 15:03:17 uut-2 1 1 1229 2
2018-01-25 15:03:18 uut-1 0 0 0 0
2018-01-25 15:03:18 uut-2 0 0 0 0
.....
grouped.get_group('uut1')
second a b
first
2018-01-25 15:03:05 uut1 1 1
2018-01-25 15:03:06 uut1 0 0
2018-01-25 15:03:07 uut1 0 0
2018-01-25 15:03:08 uut1 0 0
...
2018-01-25 15:03:27 uut1 0 0
2018-01-25 15:03:28 uut1 0 0
2018-01-25 15:03:29 uut1 5 5
我最终使用了重新采样
data2 = data.reset_index(level=[1])
second a b
first
2018-01-25 15:03:05 uut1 1 1
2018-01-25 15:03:05 uut2 2 2
2018-01-25 15:03:17 uut1 3 3
2018-01-25 15:03:17 uut2 4 4
2018-01-25 15:03:29 uut1 5 5
2018-01-25 15:03:29 uut2 6 6
然后是群比
grouped = data2.groupby('second')
<pandas.core.groupby.DataFrameGroupBy object at 0x0000000005AB6E48>
# the groupby dataframe looks something like this:
grouped.get_group('uut1')
second a b
first
2018-01-25 15:03:05 uut1 1 1
2018-01-25 15:03:17 uut1 3 3
2018-01-25 15:03:29 uut1 5 5
最后,将秒中的所有“0”项替换为“uut1”
分组的_df['second']='uut1'
最后的数据帧如下所示:
UUT Sent Received Latency(ms) Sum
DateTime
2018-01-25 15:03:05 uut-1 1 1 427 2
2018-01-25 15:03:05 uut-2 1 1 664 2
2018-01-25 15:03:06 uut-1 0 0 0 0
2018-01-25 15:03:06 uut-2 0 0 0 0
2018-01-25 15:03:07 uut-1 0 0 0 0
2018-01-25 15:03:07 uut-2 0 0 0 0
2018-01-25 15:03:08 uut-1 0 0 0 0
2018-01-25 15:03:08 uut-2 0 0 0 0
....
2018-01-25 15:03:17 uut-1 1 1 637 2
2018-01-25 15:03:17 uut-2 1 1 1229 2
2018-01-25 15:03:18 uut-1 0 0 0 0
2018-01-25 15:03:18 uut-2 0 0 0 0
.....
grouped.get_group('uut1')
second a b
first
2018-01-25 15:03:05 uut1 1 1
2018-01-25 15:03:06 uut1 0 0
2018-01-25 15:03:07 uut1 0 0
2018-01-25 15:03:08 uut1 0 0
...
2018-01-25 15:03:27 uut1 0 0
2018-01-25 15:03:28 uut1 0 0
2018-01-25 15:03:29 uut1 5 5
伟大的事实上,你的一些代码比我的更可读。谢谢分享!伟大的事实上,你的一些代码比我的更可读。谢谢分享!