[英]How to groupby pandas DataFrame by customized function
具有以下形式的数据框
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
在groupby之类使用astype(str)
。
df.groupby(df['col1'].astype(str).str[0])['sum'].mean()
:
sum
col1
3 3.0
7 5.0
8 1.5
我认为问题在于, groupby
实际上需要一个序列,而不是一个函数作为输入,像这样
table.groupby(group_condition(table[col1]))
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.