pandas:【サンプルコード】列の範囲指定


はじめに

  • ここに書いたこと
    • 列名番号での指定

前提

サンプルコード

データ作成

import pandas as pd
dic = {'area':['東京', '東京', '東京', '大阪', '大阪', '大阪'],
       'year':[2022, 2022, 2022, 2022, 2022, 2022],
       'month':[1, 2, 3, 1, 2, 3],
       'v1':[25, 10, 20, 15, 25, 30],
       'v2':[700, 400, 550, 200, 150, 350]
}
df = pd.DataFrame(dic)
print(df)
  area  year  month  v1   v2
0   東京  2022      1  25  700
1   東京  2022      2  10  400
2   東京  2022      3  20  550
3   大阪  2022      1  15  200
4   大阪  2022      2  25  150
5   大阪  2022      3  30  350
  • エリアごとの年月データを用意
  • 値はv1、v2の2つ

通常の列名取り出し

a = df[['area','year','v1']]
print(a)
  area  year  v1
0   東京  2022  25
1   東京  2022  10
2   東京  2022  20
3   大阪  2022  15
4   大阪  2022  25
5   大阪  2022  30
  • df[['area’,’year’,’v1′]]
    • 列名を指定して取り出している
    • 列番号を指定して取り出すことを以降で説明

(その前に)列番号から列名を取り出す

col1 = df.columns[[0,2,4]]
col2 = df.columns[1:4]
print(col1)
print(col2)
Index(['area', 'month', 'v2'], dtype='object')
Index(['year', 'month', 'v1'], dtype='object')
  • df.columns[[0,2,4]]
    • 列番号0,2,4の列名を取り出す
    • 'area’, 'month’, 'v2’の3つ
  • df.columns[1:4]
    • 列番号1~3のように範囲指定して列名を取り出す
    • 'year’, 'month’, 'v1’の3つ

列番号を指定して取り出す

b = df[df.columns[[0,1,2,4]]]
print(b)
  area  year  month   v2
0   東京  2022      1  700
1   東京  2022      2  400
2   東京  2022      3  550
3   大阪  2022      1  200
4   大阪  2022      2  150
5   大阪  2022      3  350
  • v1を除く列が取り出された

応用

前提

行番号、列番号を指定してデータを取り出す

c = df[df.index<3][df.columns[[0,1,3]]]
print(c)
  area  year  v1
0   東京  2022  25
1   東京  2022  10
2   東京  2022  20

集計する

groupbyとaggで集計

d = df[df.columns[[0,1,3]]].groupby(['area','year']).agg(['sum','mean'])
print(d)
           v1
          sum       mean
area year
大阪   2022  70  23.333333
東京   2022  55  18.333333
  • [df.columns[[0,1,3]]]
  • .groupby('area’)
    • 「area」で集計
    • groupbyデータタイプ作成
  • .agg(['sum’,’mean’])
    • 集計する値をagg(aggregate)で指定
    • 「sum」「mean」を指定

表示を整える

e = d.reset_index()
print(e)
print('')
e.columns = ['area','year','sum_v1','mean_v1']
print(e)
  area  year  v1
             sum       mean
0   大阪  2022  70  23.333333
1   東京  2022  55  18.333333

  area  year  sum_v1    mean_v1
0   大阪  2022      70  23.333333
1   東京  2022      55  18.333333
  • reset_index()
    • 行のインデックス番号のリセット
  • .columns = ['area’,’year’,’sum_v1′,’mean_v1′]
    • 多段の列名を1段に変更


Posted by futa