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()
我正在读取多个 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()