[英]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
# 個分類和數字列進行擴展的解決方案。 對於numeric
和categorical
列,使用mode
函數進行聚合。
使用p
創建兩個新列,范圍分別為.25
和.75
分位數以及min
和max
。
預期輸出:
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.25
和0.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.