如何通过自定义函数对pandas DataFrame进行分组

时间:2015-06-30 03:58:25

标签: python pandas

有一个格式为

的数据框
col1   sum
801    1
802    2
391    3
701    5

我想用col1的初始数量分组,应用均值

基本上结果应该是

col1    sum
8       1.5
3       3
7       5

我试过的是

def group_condition(col1):
    col1 = str(col1)
    if col1.startswith('8'):
        return 'y'
    else:
        return 'n'


augmented_error_table[[sum]].groupby(augmented_error_table[col1].groupby(group_condition).groups).mean()

但它没有用,给我空df

3 个答案:

答案 0 :(得分:2)

在groupby中使用astype(str),如。

df.groupby(df['col1'].astype(str).str[0])['sum'].mean()

Ouptut:

      sum
col1     
3     3.0
7     5.0
8     1.5

答案 1 :(得分:0)

我认为问题在于groupby实际上需要一个系列,而不是一个函数作为输入,就像这样

table.groupby(group_condition(table[col1]))

答案 2 :(得分:0)

import pandas as pd
import numpy as np

df = pd.DataFrame(dict(col1=[801,802,391,701], sum=[1,2,3,5]))
# work out initial digit by list comprehension
df['init_digit'] = [str(x)[0] for x in df.col1]
# use groupby, agg function apply to sum column only
df.groupby(['init_digit']).agg({'sum':mean})

Out[23]: 
            sum
init_digit     
3           3.0
7           5.0
8           1.5