我有一个很大的时间序列数据集,其中一些观测值(每个都有唯一的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
答案 0 :(得分:2)
您可以在groupby
之后使用filter
,仅保留“部分”列的长度为192的ID
,例如:
new_df = df.groupby('ID').filter(lambda x: len(x['Section']) == 192)
然后,当您执行new_df.groupby('ID').agg({'count'})
时,应该获得预期的输出结果