下面的任務。有必要找出每家航空公司(承運人)所有延誤的平均時間。不應使用負值。
航班資料集:
Carrier ArrDelay DepDelay
Car1 10 14
Car1 -3 0
Car2 20 13
Car2 14 15
Car3 -3 -1
Car3 2 1
Car3 -10 -3
解決方案(手動):
Car1: (10 14) / 2 = 12
Car2: (20 13 14 15) / 2 = 31
Car3: (2 1) / 3 = 0.66
輸出結果應該是:
Car2 31
Car1 12
Car3 0.66
一位用戶提出了這個很好的解決方案(也許他會看到):
out = (
df.mask(df.lt(0), 0)
.assign(AverageAllDelay= lambda x: x['ArrDelay'].add(x['DepDelay']))
.groupby('Carrier', as_index=False)['AverageAllDelay'].mean()
)
print(out)
但是,有錯誤'<' not supported between instances of 'str' and 'int'。最初,ArrDelay并DepDelay具有float64來自 CSV 檔案的格式。我借助其他 Stackoverflow 主題的多種方法將這些值轉換為整數,但沒有任何幫助。如何解決?
資料集(如有必要,但在 CSV 檔案中,有關航班的所有資訊都寫在一個字串中):
data = {
'Carrier ': {0: '1', 1: '1', 2: '2', 3: '2', 4: '3', 5: '3', 6: '3'},
'ArrDelay': {0: 10, 1: -3, 2: 20, 3: 14, 4: -3, 5: 2, 6: -10},
'DepDelay': {0: 14, 1: 0, 2: 13, 3: 15, 4: -1, 5: 1, 6: -3}
}
uj5u.com熱心網友回復:
發生錯誤是因為對to和df 的列df.mask(df.lt(0), 0)進行元素比較包含字串。df0'Carrier'
您可以嘗試df['Carrier'] = df['Carrier'].astype(int),然后您的代碼運行沒有錯誤:
>>> out = (
... df.mask(df.lt(0), 0)
... .assign(AverageAllDelay= lambda x: x['ArrDelay'].add(x['DepDelay']))
... .groupby('Carrier', as_index=False)['AverageAllDelay'].mean()
... )
>>> out
Carrier AverageAllDelay
0 1 12.0
1 2 31.0
2 3 1.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/511855.html
