我有以下数据框:
我从每个唯一的 appId 中创建了字典,如下所示:
使用以下命令:
dfs = dict(tuple(timeseries.groupby('appId')))
此后,我想从数据框中删除所有少于30行的字典。我从字典(dfs)中删除了这些字典,然后尝试了以下代码:
pd.concat([dfs]).drop_duplicates(keep=False)
但它不起作用。
答案 0 :(得分:1)
我相信您需要transform
size
,然后按boolean indexing
进行过滤:
df = pd.concat([dfs])
df = df[df.groupby('appId')['appId'].transform('size') >= 30]
#alternative 1
#df = df[df.groupby('appId')['appId'].transform('size').ge(30)]
#alternative 2 (slowier in large data)
#df = df.groupby('appId').filter(lambda x: len(x) >= 30)
另一种方法是过滤器dictionary
:
dfs = {k: v for k, v in dfs.items() if len(v) >= 30}
编辑:
timeseries = timeseries[timeseries.groupby('appId')['appId'].transform('size') >= 30]
dfs = dict(tuple(timeseries.groupby('appId')))