微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何归纳为数据帧中的特定列编写的函数以在任何相似的列上可用?

如何解决如何归纳为数据帧中的特定列编写的函数以在任何相似的列上可用?

如何调整此代码,使其可用于数据框中的任何列?目前,它仅适用于名为“空白”的列,但我还有其他10个列需要应用此相同功能

def get_averages(df: pd.DataFrame,column: str) -> pd.DataFrame:
    '''
    Add a column in place,with the averages
    of each `Num` cyclical item for each row
    '''
    # work with a new dataframe
    df2 = (
        df[['FileName','Num',column]]
        .explode('Gaps',ignore_index=True)
    )
    
    df2.Gaps = df2.Gaps.astype(float)
    
    df2['tag'] = ( # add cyclic tags to each row,within each FileName
        df2.groupby('FileName')[column]
            .transform('cumcount') # similar to range(len(group))
        % df2.Num # get the modulo of the row number within the group
    )
    
    # get averages and collect into lists
    df2 = df2.groupby(['FileName','tag'])[column].mean() # get average
    df2.rename(f'{column}_avgs',inplace=True)
    
    # collect in a list by Filename and merge with original df
    df2 = df2.groupby('FileName').agg(list)
    df = df.merge(df2,on='FileName')
    
    return df

df = get_averages(df,'Gaps')

解决方法

使用参数变量而不是对列名进行硬编码:

    df2 = (
        df[['FileName','Num',column]]
        .explode(column,ignore_index=True)
    )
    df2[column] = df2[column].astype(float)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。