我正在调整两个如下所示的数据框:
Dataframe 1
Timestamp L_x L_y L_a R_x R_y R_a
2403950 621.3 461.3 313 623.3 461.8 260
2404050 622.5 461.3 312 623.3 462.6 260
2404150 623.1 461.5 311 623.4 464 261
2404250 623.6 461.7 310 623.7 465.4 261
2404350 623.8 461.5 309 623.9 466.1 261
Dataframe 2
此数据框包含特定事件发生的时间戳。
Timestamp
0 2404030
1 2404050
2 2404250
3 2404266
4 2404282
5 2404298
6 2404314
7 2404330
8 2404350
9 2404382
所有时间戳都以毫秒为单位。如您所见,第一个数据帧重新采样到100毫秒。所以我想要做的是,根据计数对齐两个数据帧。这意味着根据计数在特定的100毫秒bin时间内发生了多少事件。例如,从数据帧1开始,在前100毫秒的时间段(24043950-2404049)中,根据第二个数据帧(2404030)仅发生一个事件,依此类推。对齐的表应如下所示:
Timestamp L_x L_y L_a R_x R_y R_a count
2403950 621.3 461.3 313 623.3 461.8 260 1
2404050 622.5 461.3 312 623.3 462.6 260 1
2404150 623.1 461.5 311 623.4 464 261 0
2404250 623.6 461.7 310 623.7 465.4 261 6
2404350 623.8 461.5 309 623.9 466.1 261 2
感谢您的帮助和建议。
答案 0 :(得分:2)
您希望对时间戳(即a // b
)执行整数除法,但首先需要在分组时添加50。然后乘以100并减去50,将其转换回正确的单位。
现在,对这个新索引进行分组并执行计数。
然后将这些计数合并到原始数据框并执行一些格式化操作以获得所需形状的数据。确保用零填充NaN。
df2['idx'] = (df2.Timestamp + 50) // 100 * 100 - 50
counts = df2.groupby('idx').count()
>>> counts
Timestamp
idx
2403950 1
2404050 1
2404250 6
2404350 2
df_new =df.merge(counts, how='left', left_on='Timestamp', right_index=True, suffixes=['', '_'])
columns = list(df_new)
columns[-1] = 'count'
df_new.columns = columns
df_new['count'].fillna(0, inplace=True)
>>> df_new
Timestamp L_x L_y L_a R_x R_y R_a count
0 2403950 621.3 461.3 313 623.3 461.8 260 1
1 2404050 622.5 461.3 312 623.3 462.6 260 1
2 2404150 623.1 461.5 311 623.4 464.0 261 0
3 2404250 623.6 461.7 310 623.7 465.4 261 6
4 2404350 623.8 461.5 309 623.9 466.1 261 2