[英]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.