【问题标题】:Applying a custom Function to a Pandas Groupby将自定义函数应用于 Pandas Groupby
【发布时间】:2020-12-28 12:21:01
【问题描述】:

我有一个名为 master_df 的 DataFrame(此处压缩)

Ticker Date Total_Invested Total_Divested Period Day
ABC 23-10-2020 200 210 1 1
BCK 23-10-2020 200 220 1 1
DUD 22-10-2020 200 190 1 2
SOL 22-10-2020 200 205 1 2

我创建了一个函数来返回给定日期的百分比回报:

def day_return(df, date):
    day_df = df[df['Date'] == date]  
    return day_df['Total Divested'].sum()/day_df['Total Invested'].sum()-1

我想结合使用 Groupby 和函数来获得每天的回报。我的想法是执行以下操作,但我一直卡住。任何帮助将不胜感激。

master_df.groupby('Date').apply(day_return, date=master_df['Date'])

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    从函数 day_return 中删除 date 参数,并仅按 Date 分组,一组中的所有值都将对应相同的值:

    def day_return(df):
        return df['Total_Divested'].sum() / df['Total_Invested'].sum() - 1
    
    res = master_df.groupby('Date').apply(day_return).reset_index(name='Total')
    print(res)
    

    输出

             Date   Total
    0  22-10-2020 -0.0125
    1  23-10-2020  0.0750
    

    如果要在原始 df (master_df) 中添加新列,请使用 transform:

    g = master_df.groupby('Date')
    master_df['Total'] = g['Total_Divested'].transform('sum') / g['Total_Invested'].transform('sum') - 1
    print(master_df)
    

    输出

      Ticker        Date  Total_Invested  Total_Divested  Period  Day   Total
    0    ABC  23-10-2020             200             210       1    1  0.0750
    1    BCK  23-10-2020             200             220       1    1  0.0750
    2    DUD  22-10-2020             200             190       1    2 -0.0125
    3    SOL  22-10-2020             200             205       1    2 -0.0125
    

    【讨论】:

    • 谢谢,当我运行它时,我收到以下错误。我想我被函数 TypeError: day_return() missing 1 required positional argument: 'date' 中的 DF 列难住了
    • @redgabe 你需要修改函数。删除我的代码中的日期参数
    • 谢谢,已修改。如何保留 Dataframe 中的其他一些非数字列(上面未列出)?
    • @redgabe 请添加预期的输出,从您所说的看来,您正在寻找的不仅仅是申请。
    猜你喜欢
    • 2023-01-23
    • 1970-01-01
    • 2020-10-29
    • 2018-09-05
    • 2021-10-02
    • 1970-01-01
    • 2019-06-26
    • 2018-06-19
    • 1970-01-01
    相关资源
    最近更新 更多