2017-08-14 17 views
2

在下面的代碼,有2個dataframes被相同標記(recent_gradsall_ages):Pandas中的iloc函數的用例是什麼?

majors = recent_grads['Major'].unique() 
rg_lower_count = 0 
for m in majors: 
    recent_grads_row = recent_grads[recent_grads['Major'] == m] 
    all_ages_row = all_ages[all_ages['Major'] == m] 

    rg_unemp_rate = recent_grads_row.iloc[0]['Unemployment_rate'] 
    aa_unemp_rate = all_ages_row.iloc[0]['Unemployment_rate'] 

    if rg_unemp_rate < aa_unemp_rate: 
     rg_lower_count += 1 

print(rg_lower_count) 

爲什麼需要的iloc[0]部分(上線7和8)?由於每個系列只有1行(最近的梯度行和所有年齡段的行),因此不需要指定要執行比較的行。 然而,沒有它,我得到這個錯誤信息:

ValueError: Can only compare identically-labeled Series objects 
+0

我認爲有更好的__vectorized__方法...你可以發佈小型可重複數據集和你想要的數據集。請閱讀[如何製作良好的可重複熊貓示例](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)並相應編輯。 – MaxU

回答

0

使用iloc意味着你總是會得到的數據幀,無論索引值的第一行;在這裏你得到一個列名,所以你最終得到每個數據幀的單個標量值。但是,如果只比較兩個數據框(或者在這種情況下從兩列中獲得的數據),則只有兩者具有完全相同的索引標籤才能進行比較。

要了解我的意思,如果您打印recent_grads_row.index[0]all_ages_row.index[0],您應該看到不同的值。另一種選擇是在兩個數據框上使用reset_index或類似的東西,但在這裏選擇第一行似乎更簡單。

相關問題