【Pandas】日付インデックスの頻度を判定する
MAX
MAX999blog
DataFrameを扱っていると、列の順番を入れ替えたくなる時がある。
特に、重要なカラムが後ろの方にある場合、中身を確認するのが面倒になるため、先頭の方に持って来たくなることがある。
DataFrameは列を入れ替えたくても1つの関数ではできず、いくつかのステップを踏む必要がある。
リストの順序も1つの関数で入れ替えられないのと同じような感じ。
特定の列の順番を入れ替えるには、3段階のステップを踏む必要がある
1import pandas as pd
2
3# サンプル DataFrame を作成
4df = pd.DataFrame({
5 'A': [1, 2, 3],
6 'B': [4, 5, 6],
7 'C': [7, 8, 9],
8})
9
10print(df)
11# A B C
12# 0 1 4 7
13# 1 2 5 8
14# 2 3 6 9
以下の例はC列を先頭に持ってくる場合の例。
1# 順番を入れ替えたい列を保持
2target_col = "C"
3df_target = df[target_col]
4
5# 入れ替え対称の列を削除
6df = df.drop(target_col, axis=1)
7
8# 任意の場所に対象の列を挿入
9df.insert(0, target_col, df_target)
10
11print(df)
12# C A B
13# 0 7 1 4
14# 1 8 2 5
15# 2 9 3 6
insertは1列ずつしかできないため、複数の列を同時にまとめて入れ替えるには、対象列と挿入先の列番号をforなどでループさせる必要がある。
1import pandas as pd
2
3# サンプルDataFrameを作成
4df = pd.DataFrame({
5 'A': [1, 2, 3],
6 'B': [4, 5, 6],
7 'C': [7, 8, 9],
8 'D': [10, 11, 12],
9 'E': [11, 12, 13],
10 'F': [12, 13, 14],
11})
12
13print(df)
14# A B C D E F
15# 0 1 4 7 10 11 12
16# 1 2 5 8 11 12 13
17# 2 3 6 9 12 13 14
サンプルとして少し列を増やしたDataFrameを作成。
以下の例はD列とE列をA列の後ろに挿入する場合の例
1
2# A列の後ろにDとEを挿入する場合の例
3target_cols = ["E", "D"]
4insert_index = 1
5
6for target_col in target_cols:
7 # 対象列を一時的に保持
8 df_target = df[target_col]
9 # 対象列を元のDataFrameから削除
10 df.drop(columns=[target_col], inplace=True)
11 # 対象列を目的の場所に挿入
12 df.insert(insert_index, target_col, df_target)
13
14print(df)
15# A D E B C F
16# 0 1 10 11 4 7 12
17# 1 2 11 12 5 8 13
18# 2 3 12 13 6 9 14
上記の例では挿入する場所を1に固定しているため、入れ替え後の列順をA、D、E、B、C、Fの順にするためにEから先にAの後ろに挿入している。
このあたりは、適宜、やりやすい方法でやるしかない。
1df = pd.DataFrame({
2 'A': [1, 2, 3],
3 'B': [4, 5, 6],
4 'C': [7, 8, 9],
5})
6# 順番を入れ替えたい列を保持
7target_col = "C"
8df_target = df[target_col]
9
10# 入れ替え対称の列を削除
11df = df.drop(target_col, axis=1)
12
13# 任意の場所に対象の列を挿入
14df.insert(0, target_col, df_target)
15
16print(df)
17# C A B
18# 0 7 1 4
19# 1 8 2 5
20# 2 9 3 6