第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 .mean() 應(yīng)用于具有條件的分組數(shù)據(jù)

將 .mean() 應(yīng)用于具有條件的分組數(shù)據(jù)

拉風(fēng)的咖菲貓 2024-01-24 20:43:26
我有一個df看起來像這樣的:Day         Country         Type        Product         Cost        Mon         US              1           a1              0Mon         US              2           a1              5Mon         US              3           a1              6Mon         CA              1           a1              8Mon         CA              2           a1              0Mon         CA              3           a1              1我正在努力做到這一點:Day         Country         Type        Product         Cost        AverageMon         US              1           a1              0           (5+6)/2Mon         US              2           a1              5           (5+6)/2Mon         US              3           a1              6           (5+6)/2Mon         CA              1           a1              8           (8+1)/2Mon         CA              2           a1              0           (8+1)/2Mon         CA              3           a1              1           (8+1)/2這個想法是將其按Country和進(jìn)行分組Product,并獲得平均成本,但取其所在Costs的位置>0。我嘗試過的:np.where(df['Cost']>0, df.loc[df.groupby(['Country','Product'])]['Cost'].mean())但我得到:ValueError:無法使用多維鍵進(jìn)行索引將內(nèi)置函數(shù)(例如.mean(), max(), etc帶有過濾器的分組熊貓數(shù)據(jù)框)應(yīng)用的最佳實踐解決方案是什么?
查看完整描述

2 回答

?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗 獲得超7個贊

第一個想法是替換0NaNs 然后使用GroupBy.transformwith?mean,默認(rèn)情況下省略缺失值:

print (df.assign(new = df['Cost'].where(df['Cost'] > 0)))

? ?Day Country? Type Product? Cost? new

0? Mon? ? ? US? ? ?1? ? ? a1? ? ?0? NaN

1? Mon? ? ? US? ? ?2? ? ? a1? ? ?5? 5.0

2? Mon? ? ? US? ? ?3? ? ? a1? ? ?6? 6.0

3? Mon? ? ? CA? ? ?1? ? ? a1? ? ?8? 8.0

4? Mon? ? ? CA? ? ?2? ? ? a1? ? ?0? NaN

5? Mon? ? ? CA? ? ?3? ? ? a1? ? ?1? 1.0



df['Average'] = (df.assign(new = df['Cost'].where(df['Cost'] > 0))

? ? ? ? ? ? ? ? ? ?.groupby(['Country','Product'])['new']

? ? ? ? ? ? ? ? ? ?.transform('mean'))

print (df)

? ?Day Country? Type Product? Cost? Average

0? Mon? ? ? US? ? ?1? ? ? a1? ? ?0? ? ? 5.5

1? Mon? ? ? US? ? ?2? ? ? a1? ? ?5? ? ? 5.5

2? Mon? ? ? US? ? ?3? ? ? a1? ? ?6? ? ? 5.5

3? Mon? ? ? CA? ? ?1? ? ? a1? ? ?8? ? ? 4.5

4? Mon? ? ? CA? ? ?2? ? ? a1? ? ?0? ? ? 4.5

5? Mon? ? ? CA? ? ?3? ? ? a1? ? ?1? ? ? 4.5

或者首先過濾、聚合mean并按以下方式分配回來DataFrame.join:


s = df[df["Cost"] > 0].groupby(['Country','Product'])['Cost'].mean().rename('Average')

df = df.join(s, on=['Country','Product'])

print (df)

? ?Day Country? Type Product? Cost? Average

0? Mon? ? ? US? ? ?1? ? ? a1? ? ?0? ? ? 5.5

1? Mon? ? ? US? ? ?2? ? ? a1? ? ?5? ? ? 5.5

2? Mon? ? ? US? ? ?3? ? ? a1? ? ?6? ? ? 5.5

3? Mon? ? ? CA? ? ?1? ? ? a1? ? ?8? ? ? 4.5

4? Mon? ? ? CA? ? ?2? ? ? a1? ? ?0? ? ? 4.5

5? Mon? ? ? CA? ? ?3? ? ? a1? ? ?1? ? ? 4.5


查看完整回答
反對 回復(fù) 2024-01-24
?
明月笑刀無情

TA貢獻(xiàn)1828條經(jīng)驗 獲得超4個贊

嘗試這個 :

df[df["Cost"] > 0].groupby(['Country','Product'])["Cost"].mean()

它過濾掉成本大于零的地方,對其進(jìn)行分組,然后取平均值。


查看完整回答
反對 回復(fù) 2024-01-24
  • 2 回答
  • 0 關(guān)注
  • 253 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號