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

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

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1030閲覧

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

nobita

総合スコア66

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2018/10/25 08:31

編集2018/10/25 08:32

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

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

CSV

1prefecture,year,population,capital,region,estimated_area,island 2Aichi-ken,1872.1667,1210368,Nagoya-shi,Chubu,5165.12,Honshu 3Aichi-ken,1873,1217444,Nagoya-shi,Chubu,5165.12,Honshu 4Aichi-ken,1874,1217521,Nagoya-shi,Chubu,5165.12,Honshu 5Aichi-ken,1875,1234003,Nagoya-shi,Chubu,5165.12,Honshu 6Aichi-ken,1876,1244711,Nagoya-shi,Chubu,5165.12,Honshu 7Aichi-ken,1877,1250839,Nagoya-shi,Chubu,5165.12,Honshu 8Akita-ken,1872.1667,582297,Akita-shi,Tohoku,11636.28,Honshu 9Akita-ken,1873,581859,Akita-shi,Tohoku,11636.28,Honshu 10Akita-ken,1874,596641,Akita-shi,Tohoku,11636.28,Honshu 11Akita-ken,1875,604114,Akita-shi,Tohoku,1636.28,Honshu 12Akita-ken,1876,609420,Akita-shi,Tohoku,11636.28,Honshu 13Aomori-ken,1872.1667,473244,Aomori-shi,Tohoku,9644.55,Honshu 14Aomori-ken,1873,473317,Aomori-shi,Tohoku,9644.55,Honshu 15Aomori-ken,1874,473098,Aomori-shi,Tohoku,9644.55,Honshu 16Aomori-ken,1875,484428,Aomori-shi,Tohoku,9644.55,Honshu 17Aomori-ken,1876,489245,Aomori-shi,Tohoku,9644.55,Honshu 18Aomori-ken,1877,462865,Aomori-shi,Tohoku,9644.55,Honshu 19

Pandas

1#一応私が考えてる途中のコードも記載します。 2import pandas as pd 3data = pd.read_csv('Japan_population_data.csv') 4#print(data.head()) 5g = data.groupby(['prefecture']) 6idx = g['population'].idxmax() 7data2 = data.loc[idx] 8#print(data2) 9u = data2['year'] 10print(u)

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

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

という前提となります

Python

1import pandas as pd 2data = pd.read_csv('Japan_population_data.csv') 3data['year'] = data['year'].astype('uint16') 4 5dic = {} 6for prefecture, d in data.groupby('prefecture'): 7 d = d.sort_values('year') 8 dic[prefecture] = d.population.diff().idxmax() 9 10res = pd.Series(dic) 11#Aichi-ken 3 12#Akita-ken 8 13#Aomori-ken 14 14#dtype: int64 15 16print(data.loc[res]) 17# prefecture year population capital region estimated_area island 18#3 Aichi-ken 1875 1234003 Nagoya-shi Chubu 5165.12 Honshu 19#8 Akita-ken 1874 596641 Akita-shi Tohoku 11636.28 Honshu 20#14 Aomori-ken 1875 484428 Aomori-shi Tohoku 9644.55 Honshu 21

投稿2018/10/25 12:56

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問