根据大熊猫的数量对齐Dataframe

时间:2015-11-04 00:36:01

标签: python pandas

我正在调整两个如下所示的数据框:

  1. 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
    
  2. Dataframe 2

  3. 此数据框包含特定事件发生的时间戳。

      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
    

    感谢您的帮助和建议。

1 个答案:

答案 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