【问题标题】:Applying several functions on dataframe columns at once一次在数据框列上应用多个函数
【发布时间】:2017-07-31 18:14:54
【问题描述】:

如何在 Dataframe 上应用多个函数:

我想做类似的事情:

features_df[features_columns].apply(lambda x: np.mean(x), lambda x: np.std(x), lambda x: np.skew(x))

谢谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    我认为你需要DataFrame.aggregate (pandas 0.20.0+) 或DataFrame.apply

    features_df[features_columns].agg(lambda x: pd.Series([np.mean(x),np.std(x)]))
    
    features_df[features_columns].apply(lambda x: pd.Series([np.mean(x),np.std(x)]))
    

    df = features_df[features_columns].agg(['mean', 'std', 'skew'])
    
    df = features_df[features_columns].apply(['mean', 'std', 'skew'])
    

    示例:

    features_df = pd.DataFrame({'A':list('abcdef'),
                               'B':[4,5,4,5,5,4],
                               'C':[7,8,9,4,2,3],
                               'D':[1,3,5,7,1,0],
                               'E':[5,3,6,9,2,4],
                               'F':list('aaabbb')})
    
    print (features_df)
       A  B  C  D  E  F
    0  a  4  7  1  5  a
    1  b  5  8  3  3  a
    2  c  4  9  5  6  a
    3  d  5  4  7  9  b
    4  e  5  2  1  2  b
    5  f  4  3  0  4  b
    

    features_columns = ['B','C']
    
    
    print (features_df[features_columns].agg(lambda x: pd.Series([np.mean(x),np.std(x)])))
         B         C
    0  4.5  5.500000
    1  0.5  2.629956
    
    print (features_df[features_columns].apply(lambda x: pd.Series([np.mean(x),np.std(x)])))
         B         C
    0  4.5  5.500000
    1  0.5  2.629956
    
    print (features_df[features_columns].agg(['mean', 'std', 'skew']))
                 B         C
    mean  4.500000  5.500000
    std   0.547723  2.880972
    skew  0.000000  0.000000
    
    print (features_df[features_columns].apply(['mean', 'std', 'skew']))
                 B         C
    mean  4.500000  5.500000
    std   0.547723  2.880972
    skew  0.000000  0.000000
    

    std函数在numpypandas中有不同的默认ddof,所以输出不同。

    还有np.skew返回:

    AttributeError: 模块 'numpy' 没有属性 'skew'

    【讨论】:

    • 我收到 AttributeError: 'DataFrame' object has no attribute 'agg' 与您的解决方案。
    • 可能需要升级 pandas,但 apply 应该很好用,只有函数必须在列表中。
    猜你喜欢
    • 2014-03-31
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2019-02-17
    相关资源
    最近更新 更多