pandas 添加 groupby 聚合

pandas add groupby aggregations

我正在读取多个 pickle 文件,我在其中进行分组聚合,然后丢弃数据框。例如,每个 pickle 文件都是一个数据框,其中包含一个月内售出的商品。我想知道每天售出多少独特的商品。

n_items = []
for file in files:
    df = pd.read_pickle(file)

    # Get unique number of items per day
    df.timestamp = pd.to_datetime(df.timestamp)
    n_items.append(df.groupby(pd.Grouper(key='timestamp', freq='1D')).items.unique())

这将给我一组独特项目的 groupby 元素(注意每个数据框跨越所有 30 天)

所以最后一个问题是:我如何 'recombine' 所有这些数据框,以便我每天只剩下唯一的项目。

这是我能找到的最接近的答案,但它是一个累加聚合,未使用 unique()

我觉得你需要concat + groupby + numpy.concatenate:

df = pd.concat(n_items)
df = df.groupby(level=0).apply(lambda x: np.concatenate(x.values)).reset_index()

另一种解决方案是从所有文件创建一个大数据帧然后聚合:

df = pd.concat([pd.read_pickle(file) for file in files], ignore_index=True)
df.timestamp = pd.to_datetime(df.timestamp)
df1 = df.groupby(pd.Grouper(key='timestamp', freq='1D')).items.unique()