給定這個 DF:
df = pd.DataFrame({'Col1':['A','A','A','B','B','B','B']
, 'Col2':['i', 'j', 'k', 'l', 'm', 'n', 'o']
, 'Col3':['Apple', 'Peach', 'Apricot', 'Dog', 'Cat', 'Mouse', 'Horse']
,})
df
然后使用此代碼:
df1 = df.groupby('Col1').agg({'Col2':'count', 'Col3': lambda x: x.iloc[2]})
df1
我得到了這個結果:

我現在想要的:
能夠在處理錯誤時使用 lambda 函式,例如,如果我將“ 'Col3': lambda x: x.iloc[0]x.iloc [0] ”更改為“ x.iloc[3] ”,這會引發錯誤,因為“ Col1['A'中的資料不足” ]與“ Col1['B'] ”相比。print('Not enough data')
!!不想使用“最后一個”,因為這是一個簡化和縮短的 DF !
uj5u.com熱心網友回復:
如果缺少值,您可以使用nth它會給您一個 NaN。不幸的是,nth不被處理,agg因此您需要單獨計算并加入:
g = df.groupby('Col1')
df1 = g.agg({'Col2':'count'}).join(g['Col3'].nth(3))
輸出:
Col2 Col3
Col1
A 3 NaN
B 4 Horse
uj5u.com熱心網友回復:
您可以嘗試使用切片物件,如果沒有值,它將回傳空系列。
df1 = df.groupby('Col1').agg({'Col2':'count',
'Col3': lambda x: x.iloc[3:4] if len(x.iloc[3:4]) else pd.NA})
print(df1)
Col2 Col3
Col1
A 3 <NA>
B 4 Horse
如果您的 Python 版本大于 3.8,您可以使用命名運算式保存輸入
df1 = df.groupby('Col1').agg({'Col2':'count',
'Col3': lambda x: v if len(v := x.iloc[3:4]) else pd.NA})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/479707.html
標籤:python-3.x 熊猫 熊猫-groupby 聚合函数
上一篇:如何從熊貓資料框中獲取不同的行?
