簡體   English   中英

熊貓:按滿足條件的列分組

[英]Pandas: Group by a column that meets a condition

我有一個包含三個列的數據集:評級,品種和狗。

import pandas as pd
dogs = {'breed': ['Chihuahua', 'Chihuahua', 'Dalmatian', 'Sphynx'],
        'dog': [True, True, True, False],
        'rating': [8.0, 9.0, 10.0, 7.0]}

df = pd.DataFrame(data=dogs)

我想計算狗是真的每品種的平均評分。 這將是預期的:

  breed     rating
0 Chihuahua 8.5   
1 Dalmatian 10.0  

這是我的嘗試:

df.groupby('breed')['rating'].mean().where(dog == True)

這是我得到的錯誤:

NameError: name 'dog' is not defined

但是當我嘗試添加where條件時我只會得到錯誤。 有人可以建議解決方案嗎? TIA

分組並選擇一列后,您的dog列在您選擇的上下文中不再存在(即使它確實沒有正確訪問它)。

首先過濾您的數據幀, 然后使用groupby with mean

df[df.dog].groupby('breed')['rating'].mean().reset_index()

       breed  rating
0  Chihuahua     8.5
1  Dalmatian    10.0

另一種解決方案是讓dog成為你的石斑魚鑰匙之一。 然后在一個單獨的步驟中由dog過濾。 如果您不想丟失非狗的匯總數據,這會更有效。

res = df.groupby(['dog', 'breed'])['rating'].mean().reset_index()

print(res)

     dog      breed  rating
0  False     Sphynx     7.0
1   True  Chihuahua     8.5
2   True  Dalmatian    10.0

print(res[res['dog']])

    dog      breed  rating
1  True  Chihuahua     8.5
2  True  Dalmatian    10.0

暫無
暫無

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

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