簡體   English   中英

帶有聚合和分位數的 Pandas Groupby

[英]Pandas Groupby with Aggregate, and Quantiles

我正在嘗試對pandas groupby進行分組並從列中計算分位數和聚合。

這是一個示例數據框:

import pandas as pd
import numpy as np

df = pd.DataFrame({
                   'id': [1, 1, 1, 2],
                   'cat': ['p','p','p','n'],
                   'num': [5, 10, 10, 5],
                   'v': [np.nan, np.nan, np.nan, 'v2'],
                   'p': [1000, 1300, 1400, 1100]
                 })

 

我正在尋找一種可以使用n # 個分類和數字列進行擴展的解決方案。 對於numericcategorical列,使用mode函數進行聚合。

使用p創建兩個新列,范圍分別為.25.75分位數以及minmax

預期輸出:

id  cat num  v    pquantile     min-max    

1   p   10   NaN  1075 - 1325   1000 - 1400  
2   n   5    v2   1100          1100

此外,聚合函數mode需要能夠處理平局。

如您的問題中所述,首先按“cat”分組並使用agg方法選擇“最常見的值”。

df_grouped_by = df.groupby('cat').agg(pd.Series.mode)

然后計算p列中每個列表值的0.250.75分位數:

df_grouped_by['pquantile'] = df_grouped_by.apply(lambda row : np.quantile(row['p'],[0.25,0.75]), axis = 1)

最后,使用類似的邏輯計算最小值和最大值:

df_grouped_by['min-max'] = df_grouped_by.apply(lambda row : [np.min(row['p']), np.max(row['p'])] , axis = 1)

這產生:

cat id  num v   p                   pquantile           min-max                         
n   2   5   v2  1100                [1100.0, 1100.0]    [1100, 1100]
p   1   10  []  [1000, 1300, 1400]  [1150.0, 1350.0]    [1000, 1400]

然后,您可以根據需要重新索引並刪除p列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM