2017-10-11 5 views
0

name行を国に対応して正しく印刷する簡単な作業を行い、その右側に降順でソートされたislmtotal行を探しています。私のコードは以下のみislmtotalを出力しますが、私はそれがどのように見えるべきかの例を与えてくれた:2番目のソートされた対応する行でパンダの行を印刷する方法

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) 

ここで、groupbymaxを見つける。

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

@ Mr.Jibz知っておきたいこと。残念ながら、あなたが私にそれを説明するだけであれば、あなたの問題を視覚化することはできません。これはちょっとした変更を加えたコードです。メソッドを変更してソリューションに近づける方法についてのヘルプが必要な場合は、新しい質問を開いて次のことを行うことをおすすめします。 1.あなたのデータをテキスト形式で表示する、2.現在の出力を表示する。 3.期待される出力を表示します。 4.現在のコードを表示します。乾杯! –

関連する問題