質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.59%

pandas で 各県ごとに各年度の人口 - 前年度の人口 の数が一番大きい年を各県ごとに出力

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 661

score 54

pandas の学習を進めており、下記のような課題があります。なかなかコードが思いつかず、悩んでいます。
アドバイスをもらいたくて、質問致します。 宜しくお願い致します。

CSVデータから読み込んだ各県の人口のデータをpandasを使って、ある年の人口 - ある年の前年度の年 = X を求めて、
各県ごとに その X が一番大きい年を出力したいです。
例 東京都:200人(1990年) - 100人(1989年)= 100 (X)
xが一番大きかったら → 1990年のデータを出力したいです。

prefecture,year,population,capital,region,estimated_area,island
Aichi-ken,1872.1667,1210368,Nagoya-shi,Chubu,5165.12,Honshu
Aichi-ken,1873,1217444,Nagoya-shi,Chubu,5165.12,Honshu
Aichi-ken,1874,1217521,Nagoya-shi,Chubu,5165.12,Honshu
Aichi-ken,1875,1234003,Nagoya-shi,Chubu,5165.12,Honshu
Aichi-ken,1876,1244711,Nagoya-shi,Chubu,5165.12,Honshu
Aichi-ken,1877,1250839,Nagoya-shi,Chubu,5165.12,Honshu
Akita-ken,1872.1667,582297,Akita-shi,Tohoku,11636.28,Honshu
Akita-ken,1873,581859,Akita-shi,Tohoku,11636.28,Honshu
Akita-ken,1874,596641,Akita-shi,Tohoku,11636.28,Honshu
Akita-ken,1875,604114,Akita-shi,Tohoku,1636.28,Honshu
Akita-ken,1876,609420,Akita-shi,Tohoku,11636.28,Honshu
Aomori-ken,1872.1667,473244,Aomori-shi,Tohoku,9644.55,Honshu
Aomori-ken,1873,473317,Aomori-shi,Tohoku,9644.55,Honshu
Aomori-ken,1874,473098,Aomori-shi,Tohoku,9644.55,Honshu
Aomori-ken,1875,484428,Aomori-shi,Tohoku,9644.55,Honshu
Aomori-ken,1876,489245,Aomori-shi,Tohoku,9644.55,Honshu
Aomori-ken,1877,462865,Aomori-shi,Tohoku,9644.55,Honshu
#一応私が考えてる途中のコードも記載します。
import pandas as pd
data = pd.read_csv('Japan_population_data.csv')
#print(data.head())
g = data.groupby(['prefecture'])
idx = g['population'].idxmax()
data2 = data.loc[idx]
#print(data2)
u = data2['year']
print(u)
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

こんな感じでどうでしょうか

groupby() にてループ処理を行い、data.population.diff() が最大になる indexを dict に格納しております。

  • yearの少数表記は無視して問題ない
  • yearに欠損している年がない

という前提となります

import pandas as pd
data = pd.read_csv('Japan_population_data.csv')
data['year'] = data['year'].astype('uint16')

dic = {}
for prefecture, d in data.groupby('prefecture'):
    d = d.sort_values('year')
    dic[prefecture] = d.population.diff().idxmax()

res = pd.Series(dic)
#Aichi-ken      3
#Akita-ken      8
#Aomori-ken    14
#dtype: int64

print(data.loc[res])
#    prefecture  year  population     capital  region  estimated_area  island
#3    Aichi-ken  1875     1234003  Nagoya-shi   Chubu         5165.12  Honshu
#8    Akita-ken  1874      596641   Akita-shi  Tohoku        11636.28  Honshu
#14  Aomori-ken  1875      484428  Aomori-shi  Tohoku         9644.55  Honshu

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • NumPyに関する質問
  • pandas で 各県ごとに各年度の人口 - 前年度の人口 の数が一番大きい年を各県ごとに出力