2017-10-11 37 views
0

我期待做一個簡單的任務,整齊地打印name行,對應的國家,以及那個行的排序降序排列的權利islmtotal。我下面的代碼只打印islmtotal,但我已經給了它應該如何看一個例子:如何打印第二排序相應行的大熊貓行

Name Islmtotal 


USA 1.99 

GER 1.93 

NED .76 

religion = pd.read_csv('natldata.csv', usecols = [0, 2, 51, 52, 53, 54, 55, 56, 57, 58], na_values=['NULL']) 

religion['islmtotal']= religion[['islmsunpct', 'islmshipct', 'islmibdpct', 'islmnatpct', 'islmalwpct', 'islmahmpct', 'islmothrpct', 'islmgenpct']].sum(axis=1) 

religyearask = input("Please enter year in multiples of 5 (eg 1980): ") 

maxstateyear = religion.loc[religion['year'] == religyearask].sort_values('year', ascending=False).groupby(['name'], sort=False)['islmtotal'].max() 

print(maxstateyear.to_string(index=False)) 
+0

它是怎樣現在打印?你最初的df是什麼樣的?沒有太多的信息在這裏繼續。 –

+0

爲了清晰起見,我編輯了上面的代碼。 –

回答

0

它有助於打破了步驟,這樣你就可以找出你的麻煩之源。

首先,創建一個掩碼來索引。

m = religion['year'] == religyearask 

現在,索引和排序。

df = religion.loc[m].sort_values('year', ascending=False) 

現在,groupby並找到max

df = df.groupby('name', as_index=False)['islmtotal'].max() 

大概,這是你麻煩的根源。請注意,默認情況下,groupby會將分組依據轉換爲索引,因此as_index=False會阻止此操作。

現在,轉換爲to_string並打印。

print(maxstateyear.to_string(index=False)) 

OneLiner™

print(
    religion.loc[religion['year'] == religyearask]\ 
      .sort_values('year', ascending=False)\ 
      .groupby('name', as_index=False)['islmtotal'].max()\ 
      .to_string(index=False) 
) 
+0

好吧,這讓我更加接近,但是我看到上面的代碼顯示的是列,但是它的按字母順序排列的國家/地區組。我更喜歡降序數字作爲排序方法。 –

+0

@Jibz先生很瞭解。不幸的是,如果你只是向我解釋,我無法想象你的問題。這只是你的代碼,只是稍作修改而已。如果您希望獲得關於如何改變您的方法以接近您的解決方案的幫助,我建議您打開一個新問題並執行以下操作; 1.以文本形式顯示數據,2.顯示當前輸出。 3.顯示您的預期輸出。 4.顯示你的當前代碼。乾杯! –