将自定义函数传递给 pandas .agg()

我在 pandas 中有以下聚合:


summary_df = df.groupby(['provider', 'id']).agg(

    title           =('title', 'first'),

    file_size       = *custom*

).reset_index()

对于file_size我想使用以下计算:


sum([item['file_size'] for item in df if item['is_main_video'] is True])

我将如何在 内执行上述操作.agg()?


阿晨1998
浏览 153回答 2
2回答

慕桂英546537

agg在您的情况下,将标记一列作为源,您可以在之前创建另一列groupbydf['New'] = np.where(df['is_main_video'], df['file_size'], 0)summary_df = df.groupby(['provider', 'id']).agg(    title           =('title', 'first'),    file_size       = ('New', 'sum')).reset_index()更新summary_df = df.assign(New = np.where(df['is_main_video'], df['file_size'], 0)).groupby(['provider', 'id']).agg(    title           =('title', 'first'),    file_size       = ('New', 'sum')).reset_index()

猛跑小猪

您可以Series.where暂时“忽略”您的 file_sizes,其中“is_main_video”为 False,然后执行 groupby 操作来对剩余内容进行求和:import pandas as pddf = pd.DataFrame({    "provider": ["A", "A", "A", "B", "B"],    "title": ["hello", "world", "pandas", "example", "here"],    "is_main_video": [True, False, True, True, False],    "file_size": [10, 12, 20, 19, 10]})print(df)  provider    title  is_main_video  file_size0        A    hello           True         101        A    world          False         122        A   pandas           True         203        B  example           True         194        B     here          False         10aggregated_df = (df.assign(file_size=df["file_size"].where(df["is_main_video"]))                 .groupby("provider", as_index=False)                 .agg(                     title=("title", "first"),                     file_size=("file_size", "sum"))                )print(aggregated_df)  provider    title  file_size0        A    hello       30.01        B  example       19.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python