有一个格式为
的数据框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
答案 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