在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/數據分析&挖掘  Python/ 如何對某一列自動分組,統(tǒng)計求和

如何對某一列自動分組,統(tǒng)計求和

V1 V2
0.5 2
0.8 13
0.7 5
0.9 25
1.2 4
...

請問如何按照區(qū)間對V2分組(統(tǒng)計最大值到最小值,分成n個區(qū)間),統(tǒng)計每個區(qū)間中所有V1值的平均數

回答
編輯回答
薔薇花

binning的部分可以用 case_when

library(tidyverse)

data %>%
mutate(V2 = case_when(V2 %>% between(0,1) ~ "0-1",
                      V2 %>% between(1,2) ~ "0-2",
                      TRUE ~ ">=3") %>%
group_by(V2) %>%
summarize(mean_value = mean(V1))

是不是 R 的代碼比上面的 更用戶友好點。

2018年5月5日 14:03
編輯回答
有你在

使用pandas.cutgroupby

import pandas as pd
from io import StringIO

s = """
V1,V2
0.5,2
0.8,13
0.7,5
0.9,25
1.2,4"""

df = pd.read_csv(StringIO(s))

# 假設分成10組
step = (df.V2.max - df.V2.min)/10
bins = [df.V2.min() + i * step for i in range(11)]
result = df.groupby(pd.cut(df.V2, bins)).V1.mean()

輸出:

V2
(2.0, 4.3]      1.2
(4.3, 6.6]      0.7
(6.6, 8.9]      NaN
(8.9, 11.2]     NaN
(11.2, 13.5]    0.8
(13.5, 15.8]    NaN
(15.8, 18.1]    NaN
(18.1, 20.4]    NaN
(20.4, 22.7]    NaN
(22.7, 25.0]    0.9
Name: V1, dtype: float64
2017年11月18日 01:48
編輯回答
喵小咪

對 v2 列分組,映射成分組 ID 列,然后做平均值統(tǒng)計便可。

請參考以下代碼

'''
按區(qū)間對某列做分組,然后統(tǒng)計各組的另一列的平均值。

author: 李毅
'''
import numpy as np
import pandas as pd


df = pd.DataFrame([
    [0.1, 1],
    [0.2, 2],
    [0.3, 3],
    [0.4, 4],
    [0.5, 5],
    [0.6, 6],
], columns=['v1', 'v2'])


# 對列 v2 分組。
# 除了 np.histogram ,還可以用等距法等分區(qū)間,這取決于你的業(yè)務需求。
ranges = np.histogram(df.v2.values, 3)[1]


def tag_v2(value, ranges):
    ''' 用分組 ID 對 v2 值做標簽。 '''
    for i in range(len(ranges) - 1):
        if value >= ranges[i] and value <= ranges[i+1]:
            return i
    return -1


# 添加 v2 標簽列。
df['v2_tag'] = df.v2.apply(lambda i: tag_v2(i, ranges))

print df

輸出結果

      v1    v2    v2_tag
0    0.1    1    0
1    0.2    2    0
2    0.3    3    1
3    0.4    4    1
4    0.5    5    2
5    0.6    6    2

統(tǒng)計平均值

print df.groupby('v2_tag')['v1'].mean()

輸出結果

     v2_tag
0    0.15
1    0.35
2    0.55
Name: v1, dtype: float64
2018年4月14日 09:21