3 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
我有一個(gè)航班列表作為熊貓數(shù)據(jù)框,如下所示:
airline status number ...
Aer Lingus some error A 14 ...
Aeroflot success 47 ...
Air Canada success 2 ...
Air Dolomiti success 2 ...
Air Europa some error B 4 ...
Air France success 40 ...
Alitalia some error A 10 ...
....
我為每個(gè)成功或出錯(cuò)的航班進(jìn)行了一些 api 調(diào)用。
我想要的是每家航空公司的成功率。所以我知道我可以用 groupby 計(jì)算“航空公司”和“狀態(tài)”列中值的出現(xiàn)次數(shù),但我沒有對(duì)值的比率執(zhí)行此操作。
def calculate_quote_success_ratios(flights):
success_ratio_per_airline = flights.groupby(['airline', 'status']).count()
# TODO: Include ratio with failures!
return success_ratio_per_airline
預(yù)期的輸出應(yīng)該是這樣的:
airline success_ratio
Aer Lingus 0.72
Aeroflot 0.845
Air Canada 0.935
Air Dolomiti 0.5
Air Europa ...
....
編輯:要清楚,該列df['numbers']不相關(guān)。所以我只想計(jì)算每家航空公司各種錯(cuò)誤的“成功”百分比。

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
分組明智的航班數(shù)量計(jì)數(shù)
count_flight=df.groupby('airline').status.count()
成功數(shù)量的分組明智計(jì)數(shù)
count_success=df[df['status']=='success'].groupby('airline').status.count()
pandas div 返回前兩個(gè)數(shù)據(jù)幀的分組比率。
count_success.div(count_flight).fillna(0)

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
我不得不修改你的例子才能讓它工作,但你可以簡(jiǎn)單地做 df.groupby(['airline', 'status']).sum() / df.groupby(['airline']).sum()
原始 df:
airline status number
0 Aer Lingus some error A 14
1 Aeroflot success 47
2 Air Canada success 2
3 Air Dolomiti success 2
4 Air Europa some error B 4
5 Air France success 40
6 Alitalia some error A 10
7 Alitalia success 10
8 Air France some error B 10
9 Aer Lingus success 12
df.groupby(['airline', 'status']).sum() / df.groupby(['airline']).sum()
number
airline status
Aer Lingus some error A 0.538462
success 0.461538
Aeroflot success 1.000000
Air Canada success 1.000000
Air Dolomiti success 1.000000
Air Europa some error B 1.000000
Air France some error B 0.200000
success 0.800000
Alitalia some error A 0.500000
success 0.500000
添加回答
舉報(bào)