pandas:【サンプルコード】列の範囲指定
目次
はじめに
- ここに書いたこと
- 列名番号での指定
前提
- 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
- [df.index<3]
- 行番号の指定
- df.isin([1,2,4])のように行番号指定も可能
- df.isinの参考ページ
- pandas:【isin,isnull】条件付き行の抽出方法
- [df.columns[[0,1,3]]]
- 列番号の指定
- [df.index<3]と[df.columns[[0,1,3]]]は順序が逆転しても可
集計する
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段に変更
