我正在嘗試使用具有中值模型圓柱編號的字典替換“圓柱”列中的 NaN。我認為它應該很容易作業,但我嘗試的每一種方式都被卡住了。
cylinders_model_med = df.groupby('model').agg({'cylinders': 'median'})
cylinders_model_med=cylinders_model_med.to_dict()
#output:
'bmw x5': 6.0,
'buick enclave': 6.0,
'cadillac escalade': 8.0,
'chevrolet camaro': 6.0,
'chevrolet camaro lt coupe 2d': 6.0,
'chevrolet colorado': 5.0,
'chevrolet corvette': 8.0,
'chevrolet cruze': 4.0,
'chevrolet equinox': 4.0,
'chevrolet impala': 6.0,
'chevrolet malibu': 4.0,
'chevrolet silverado': 8.0,
'chevrolet silverado 1500': 8.0,
'chevrolet silverado 1500 crew': 8.0,
'chevrolet silverado 2500hd': 8.0,
'chevrolet silverado 3500hd': 8.0,
'chevrolet suburban': 8.0,
'chevrolet tahoe': 8.0,
'chevrolet trailblazer': 6.0,
'chevrolet traverse': 6.0,
'chrysler 200': 4.0,
'chrysler 300': 6.0,
'chrysler town & country': 6.0,
'dodge charger': 6.0,
'dodge dakota': 6.0,
'dodge grand caravan': 6.0,
'ford econoline': 8.0,
'ford edge': 6.0,
'ford escape': 4.0,
'ford expedition': 8.0,
'ford explorer': 6.0,
'ford f-150': 8.0,
'ford f-250': 8.0,
'ford f-250 sd': 8.0,
'ford f-250 super duty': 8.0,
'ford f-350 sd': 8.0,
'ford f150': 8.0,
'ford f150 supercrew cab xlt': 6.0,
'ford f250': 8.0,
'ford f250 super duty': 8.0,
'ford f350': 8.0,
'ford f350 super duty': 8.0,
'ford focus': 4.0,
'ford focus se': 4.0,
'ford fusion': 4.0,
'ford fusion se': 4.0,
'ford mustang': 6.0,
'ford mustang gt coupe 2d': 8.0,
'ford ranger': 6.0,
'ford taurus': 6.0,
'gmc acadia': 6.0,
'gmc sierra': 8.0,
'gmc sierra 1500': 8.0,
'gmc sierra 2500hd': 8.0,
'gmc yukon': 8.0,
'honda accord': 4.0,
'honda civic': 4.0,
'honda civic lx': 4.0,
'honda cr-v': 4.0,
'honda odyssey': 6.0,
'honda pilot': 6.0,
'hyundai elantra': 4.0,
'hyundai santa fe': 6.0,
'hyundai sonata': 4.0,
'jeep cherokee': 6.0,
'jeep grand cherokee': 6.0,
'jeep grand cherokee laredo': 6.0,
'jeep liberty': 6.0,
'jeep wrangler': 6.0,
'jeep wrangler unlimited': 6.0,
'kia sorento': 4.0,
'kia soul': 4.0,
'mercedes-benz benze sprinter 2500': 6.0,
'nissan altima': 4.0,
'nissan frontier': 6.0,
'nissan frontier crew cab sv': 6.0,
'nissan maxima': 6.0,
'nissan murano': 6.0,
'nissan rogue': 4.0,
'nissan sentra': 4.0,
'nissan versa': 4.0,
'ram 1500': 8.0,
'ram 2500': 6.0,
'ram 3500': 6.0,
'subaru forester': 4.0,
'subaru impreza': 4.0,
'subaru outback': 4.0,
'toyota 4runner': 6.0,
'toyota camry': 4.0,
'toyota camry le': 4.0,
'toyota corolla': 4.0,
'toyota highlander': 6.0,
'toyota prius': 4.0,
'toyota rav4': 4.0,
'toyota sienna': 6.0,
'toyota tacoma': 6.0,
'toyota tundra': 8.0,
'volkswagen jetta': 4.0,
'volkswagen passat': 4.0}}
#input:
df['cylinders']=df['cylinders'].fillna(cylinders_model_med)
df['cylinders'].isna().sum()
#output
5260
這與我開始使用的 NaN 數量相同。我是新來的,所以如果您需要更多(或更少)資訊,請告訴我。
感謝您的時間!
uj5u.com熱心網友回復:
從相應的值中填充NaN值是combine_first謀生的。您可以按模型計算中值圓柱數,然后按模型填寫原始資料框 NaN 圓柱數。
假設這個起始資料框
model cylinders
0 nissan maxima 6.0
1 nissan maxima 6.0
2 nissan maxima 4.0
3 nissan murano 6.0
4 nissan murano NaN
5 nissan murano 4.0
6 nissan murano 6.0
7 nissan rogue 4.0
8 nissan rogue 4.0
9 nissan rogue NaN
10 nissan rogue 6.0
11 nissan sentra 6.0
12 nissan sentra 4.0
13 nissan sentra 4.0
14 nissan versa 4.0
15 nissan versa 4.0
16 nissan versa NaN
17 nissan versa 4.0
按模型計算中值圓柱并填寫NaNs
df.assign(cylinders=df['cylinders'].combine_first(df[['model','cylinders']].groupby('model').transform('median').squeeze()))
結果
model cylinders
0 nissan maxima 6.0
1 nissan maxima 6.0
2 nissan maxima 4.0
3 nissan murano 6.0
4 nissan murano 6.0
5 nissan murano 4.0
6 nissan murano 6.0
7 nissan rogue 4.0
8 nissan rogue 4.0
9 nissan rogue 4.0
10 nissan rogue 6.0
11 nissan sentra 6.0
12 nissan sentra 4.0
13 nissan sentra 4.0
14 nissan versa 4.0
15 nissan versa 4.0
16 nissan versa 4.0
17 nissan versa 4.0
uj5u.com熱心網友回復:
pandas 中的對齊是基于索引的,因此您需要創建默認值,這些默認值要么顯式對齊資料框,要么自動對齊。最簡單的方法是創建一個與dfusing具有相同索引的默認系列replace:
defaults = df['model'].replace(cylinders_model_med)
df['cylinders'] = df['cylinders'].fillna(defaults)
有關更多資訊,請參閱檔案:矢量化操作和標簽對齊
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/496110.html
上一篇:Pandas基于groupby掩碼過濾資料幀的最有效方法
下一篇:基于一個重復行構建資料框
