首页 > 解决方案 > 根据唯一 ID Pandas 数据框收集行

问题描述

我有一个大型时间序列数据集,其中一些观察值(每个都有一个唯一的 ID)具有不同的长度。我还有一个“部分”列,用于计算每个唯一 ID 的时间步或行。

df.groupby([df['ID']]).agg({'count'})

                                  A             B                         Z
                                 count         count         ...         count   
    ID                                                        
    25782                          194           194                      194   
    25783                          198           198                      198   
    25784                          194           194                      194   
    25785                          192           192                      192   
   ...                             ...           ...          ...          ...
    25787                          192           192                      192   
    25788                          195           195                      195   
    25789                          196           196                      196   
    25790                          200           200                      200   

假设我想创建一个仅包含唯一 ID 长度 = 192 的新数据框。即“部分”最多为 192。

到目前为止,我已经尝试了以下但无济于事。请帮忙。

mask = df.groupby('ID')(len(df['Section']) == 192)
df = df.loc[mask]
print(df)

df.groupby('ID').df[df['Section'].max() == 192]

编辑

期望的输出

new_df.groupby([new_df['ID']]).agg({'count'})

                               A             B                         Z
                             count         count         ...         count   
ID                                                        
25752                          192           192                      192   
25137                          192           192                      192   
25970                          192           192                      192   
25440                          192           192                      192  

标签: pythonpandasdataframe

解决方案


您可以使用filteraftergroupby 仅保留ID'Section' 列的长度为 192 的位置,例如:

new_df = df.groupby('ID').filter(lambda x: len(x['Section']) == 192)

然后,当您这样做时,new_df.groupby('ID').agg({'count'})您应该得到预期的输出


推荐阅读