Skip to main content
 首页 » 编程设计

python之使用 pandas 的 TimeGrouper() 以 1 秒为间隔查找列数

2025年05月04日11webabcd

考虑由 Timestamp 索引的数据帧“数据”如下:

Index                                Receiver     Type         Retry 
1970-01-01 00:00:00.000000000         R1          Data         1 
1970-01-01 00:00:00.800000000         R1          Non-Data     1 
1970-01-01 00:00:01.000287000         R2          Data         0 
1970-01-01 00:00:01.600896000         R2          Data         1 
1970-01-01 00:00:02.001388000         R1          Data         1 
1970-01-01 00:00:02.004698000         R1          Non-Data     1 
1970-01-01 00:00:02.006706000         R2          Data         1 
1970-01-01 00:00:02.501351000         R2          Data         1 
1970-01-01 00:00:02.810382000         R1          Data         0 
1970-01-01 00:00:03.001981000         R1          Data         0 
1970-01-01 00:00:03.377116000         R1          Data         0 
1970-01-01 00:00:03.701811000         R2          Data         1 
1970-01-01 00:00:03.910326000         R2          Data         0 
1970-01-01 00:00:03.951355000         R2          Non-Data     1 

我想找到 Type 为“Data”且 Retry 等于 1 的所有行,然后以 1 秒的间隔对索引进行分组以查找每种 Receiver 类型的计数。

作为 df2 的期望输出:

Index                        R1   R2 
1970-01-01 00:00:00          1    0 
1970-01-01 00:00:01          0    1 
1970-01-01 00:00:02          1    2 
1970-01-01 00:00:03          0    1 

请您参考如下方法:

这可以通过一个简单的pivot_table 来完成,即

ndf = df[df['Type'].eq('Data')].pivot_table(columns=['Receiver'],values='Retry', 
             index=pd.Grouper(key='Index',freq='s'), aggfunc='sum',fill_value=0) 
 
Receiver             R1  R2 
Index                       
1970-01-01 00:00:00   1   0 
1970-01-01 00:00:01   0   1 
1970-01-01 00:00:02   1   2 
1970-01-01 00:00:03   0   1