根据唯一的ID熊猫数据框收集行

时间:2018-12-18 17:01:37

标签: python pandas dataframe

我有一个很大的时间序列数据集,其中一些观测值(每个都有唯一的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)

AND

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  

1 个答案:

答案 0 :(得分:2)

您可以在groupby之后使用filter,仅保留“部分”列的长度为192的ID,例如:

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

然后,当您执行new_df.groupby('ID').agg({'count'})时,应该获得预期的输出结果

相关问题