pandas-グループ化操作(2)-カスタムのグループ化および集約操作agg

ここに画像の説明を挿入します

# 自定义分组规则
def get_score_group(score):
    if score <= 4:
        score_group = 'low'
    elif score <= 6:
        score_group = 'middle'
    else:
        score_group = 'high'
    return score_group
# 方法1:传入自定义的函数进行分组按单列分组
data2 = data.set_index('Happiness Score')
data2.groupby(get_score_group).size()

ここに画像の説明を挿入します

# 方法2:人为构造出一个分组列
data['score group'] = data['Happiness Score'].apply(get_score_group)
data.tail()

ここに画像の説明を挿入します

data.groupby('score group').size()

ここに画像の説明を挿入します
カスタム集計操作

data.groupby('Region').max()
data.groupby('Region').agg(np.max)

ここに画像の説明を挿入します

# 传入包含多个函数的列表
data.groupby('Region')['Happiness Score'].agg([np.max, np.min, np.mean])

ここに画像の説明を挿入します

# 通过字典为每个列指定不同的操作方法
data.groupby('Region').agg({
    
    'Happiness Score': np.mean, 'Happiness Rank': np.max})

ここに画像の説明を挿入します

# 传入自定义函数
def max_min_diff(x):
    return x.max() - x.min()

data.groupby('Region')['Happiness Rank'].agg(max_min_diff)

ここに画像の説明を挿入します
運動

存在DataFrame结构的数据df,对列名为data1的数据依次求最大值、均值、最小值;
利用字典,对列名为data2的数据求均值,对列名data3的数据计算个数;
对列名为data4的数据自定义计算,自定义函数为组内最大值减去均值,且保留两位小数,最后将聚合的数据进行合并。

df = pd.DataFrame({
    
    'key':['one', 'three', 'two', 'two', 'one','three','three','two','one','one'],

     'data1':np.random.randint(25,75,size=10),

    'data2':np.random.randint(1,50,size=10),

    'data3':np.random.randint(50,100,size=10),

    'data4':np.random.randint(100,150,size=10)})

data1=df.groupby('key')['data1'].(1)([np.max,np.mean,np.(2)])

data1.columns=['data1_max','data1_mean','data1_min']

data23=df.(3)('key').agg({
    
    'data2':np.(4),'data3':np.size})

 

def get_data4_diff(data):

    return round(data.(5)()-data.mean(),(6))

data4=df.groupby('key')['data4'].agg((7))

pd.concat([data1,data23,(8)],axis=1)

空欄に記入してください(1):正解はaggです。
空欄に記入してください(2):正解は最小です。
空欄に記入してください(3):正解はgroupbyです。
空欄に記入してください(4):正解は意味します。
空欄に記入してください(5):正解は最大です。
空欄に記入してください(6):正解2。
空欄に記入してください(7):正解はget_data4_diffです。
空欄に記入してください(8):正解データ4。

おすすめ

転載: blog.csdn.net/lildn/article/details/114639315