我有一张表,在第一列中有整数(7、8、17、467等)指示秒,而在另一列中,我具有在该秒中传递的数据包的数量。我想对所有每秒在10秒范围内发生的数据包求和。因此,例如,我想每隔10秒就有一个数据包的数量,以便更好地可视化问题。一个问题是我每秒没有数据包,但是例如第二个数字5我没有数据包,并且time = 5的行不存在。
有人有什么建议吗?
rpl_dio = data.loc[data['MessageLabel'] == 0]
rpl_dio['Time'] = rpl_dio['Time'].astype(int)
rpl_dio_total = rpl_dio.groupby('Time')['MessageLabel'].count().reset_index(name='PackTime')
rpl_dio_total = rpl_dio_total.sort_values(by='Time',ascending=True)
plt.figure(figsize=(15,9))
plt.plot(rpl_dio_total['Time'],rpl_dio_total['PackTime'])
plt.title( "DIO packets rate" )
plt.ylabel( "Number of packets" )
plt.xlabel( "Time [s]" )
plt.show()
答案 0 :(得分:2)
我首先要添加一个带有时间戳记的新列(输入您的日期),然后将其与秒的时间间隔结合起来
df['Seconds'] = pd.Timestamp('2019/01/01 00:00:00') + pd.to_timedelta(df['Time'], unit='s')
Out[61]:
Time PackTime Seconds
0 7 32 2019-01-01 00:00:07
1 9 53 2019-01-01 00:00:09
2 10 34 2019-01-01 00:00:10
3 11 53 2019-01-01 00:00:11
4 12 34 2019-01-01 00:00:12
并将'Seconds'
列设置为索引
df.set_index('Seconds', inplace=True)
Out[62]:
Time PackTime
Seconds
2019-01-01 00:00:07 7 32
2019-01-01 00:00:09 9 53
2019-01-01 00:00:10 10 34
2019-01-01 00:00:11 11 53
2019-01-01 00:00:12 12 34
现在您可以使用resample()
为10秒的'10S'
方法
df['PackTime'].resample('10S').sum()
Out[63]:
Seconds
2019-01-01 00:00:00 85
2019-01-01 00:00:10 121
Freq: 10S, Name: PackTime, dtype: int64
答案 1 :(得分:0)
答案 2 :(得分:0)
尝试以下方法:
pd.cut(df.Time, bins=np.arange(0, 100, 10)).groupby('Time').count()