有没有办法使用groupby()
的函数形式,例如groupby(f)
其中f是一个函数,按表内容分组?看起来f()
只是用索引调用。
样品:
import pandas as pd
df0 = pd.DataFrame([
dict(age=30,sex='M',name='Jim',weight=143),
dict(age=45,sex='F',name='Francine',weight=102),
dict(age=22,sex='F',name='Jill',weight=190),
dict(age=37,sex='M',name='Joseph',weight=221),
dict(age=55,sex='M',name='Jerry',weight=187),
dict(age=48,sex='M',name='Gus',weight=262),
dict(age=45,sex='F',name='Jean',weight=112),
dict(age=28,sex='F',name='Fiona',weight=133),
dict(age=25,sex='M',name='Greg',weight=165),
dict(age=34,sex='F',name='Jennifer',weight=137),
dict(age=26,sex='M',name='Jason',weight=172),
dict(age=28,sex='M',name='Jerome',weight=205),
dict(age=61,sex='F',name='Faye',weight=140),
dict(age=32,sex='M',name='Joshua',weight=180)])
df0.groupby('sex').mean()
打印出来
age weight
sex
F 39.166667 135.666667
M 35.125000 191.875000
但如果我想按性别分组,然后按姓名的第一个字母分组呢?
答案 0 :(得分:2)
尝试使用带有索引的str访问器作为groupby列表中的第二个元素:
df0.groupby(['sex',df0['name'].str[0]]).mean()
输出:
age weight
sex name
F F 44.666667 125.000000
J 33.666667 146.333333
M G 36.500000 213.500000
J 34.666667 184.666667
答案 1 :(得分:2)
如果您需要使用某个功能,可以创建一个新列:
def get_key(df):
return df["sex"] + "-" + df["name"].str[0]
df0.assign(my_key=get_key).groupby("my_key").mean()