Pandas: apply different functions to different columns

前端 未结 3 724
逝去的感伤
逝去的感伤 2020-12-16 19:49

When using df.mean() I get a result where the mean for each column is given. Now let\'s say I want the mean of the first column, and the sum of the second. Is t

相关标签:
3条回答
  • 2020-12-16 20:10

    I think you can use the agg method with a dictionary as the argument. For example:

    df = pd.DataFrame({'A': [0, 1, 2], 'B': [3, 4, 5]})
    
    df =
    A   B
    0   0   3
    1   1   4
    2   2   5
    
    df.agg({'A': 'mean', 'B': sum})
    
    A     1.0
    B    12.0
    dtype: float64
    
    0 讨论(0)
  • 2020-12-16 20:20

    Just faced this situation myself and came up with the following:

    In [1]: import pandas as pd
    
    In [2]: df = pd.DataFrame([['one', 'two'], ['three', 'four'], ['five', 'six']], 
       ...:                   columns=['A', 'B'])
    
    In [3]: df
    Out[3]: 
           A     B
    0    one   two
    1  three  four
    2   five   six
    
    In [4]: converters = {'A': lambda x: x[:1], 'B': lambda x: x.replace('o', '')}
    
    In [5]: new = pd.DataFrame.from_dict({col: series.apply(converters[col]) 
       ...:                               if col in converters else series
       ...:                               for col, series in df.iteritems()})
    
    In [6]: new
    Out[6]: 
       A    B
    0  o   tw
    1  t  fur
    2  f  six
    
    0 讨论(0)
  • 2020-12-16 20:28

    You can try a closure:

    def multi_func(functions):
        def f(col):
            return functions[col.name](col)
        return f
    
    df = pd.DataFrame(np.random.random((10, 2)), columns=['A', 'B'])
    result = df.apply(multi_func({'A': np.mean, 'B': np.sum}))
    
    0 讨论(0)
提交回复
热议问题