私には次のような要件があります:
私は次のデータを含むcsvファイルを持っています(これは単なる例であり、データははるかに大きいです):
xxxx|A|B|C|D|E
xxxx|P|Q|R|S|T
DATE|L|M|N|O|P
01/02/1997|12|4|5|0|0
01/03/1998|71|2|4|8|0
列が次のようになるようにデータをデータフレームに保存したい:
A 01/02/1997 P L 12
B 01/02/1997 Q M 4
C 01/02/1997 R N 5
D 01/02/1997 S O 0
E 01/02/1997 T P 0
A 01/03/1998 P L 71
B 01/03/1998 Q M 2
C 01/03/1998 R N 4
D 01/03/1998 S O 8
E 01/03/1998 T P 0
基本的に最初の列はピボットする必要があります。誰か助けてもらえますか?名前とデータは単なる例です(ダミー)
最初の作成MultiIndex in columns
によりheader=[0,1,2]
、パラメータとによってインデックスに最初の列を変換index_col=[0]
中read_csv
:
df = pd.read_csv(filename, sep="|", header=[0,1,2], index_col=[0])
print (df)
xxxx A B C D E
xxxx P Q R S T
DATE L M N O P
01/02/1997 12 4 5 0 0
01/03/1998 71 2 4 8 0
詳細:
print (df.columns)
MultiIndex([('A', 'P', 'L'),
('B', 'Q', 'M'),
('C', 'R', 'N'),
('D', 'S', 'O'),
('E', 'T', 'P')],
names=['xxxx', 'xxxx', 'DATE'])
その後で移調DataFrame.T
することによりリシェイプ、DataFrame.stack
ソートにより、DataFrame.sort_index
によりマルチインデックスのラベルを作成し、DataFrame.rename_axis
そして最後に変換MultiIndex Series
するDataFrame
ことによりSeries.reset_index
:
df1 = (df.T
.stack(dropna=False)
.sort_index(level=3)
.rename_axis(('a','b','c','d'))
.reset_index(name='e'))
print (df1)
a b c d e
0 A P L 01/02/1997 12
1 B Q M 01/02/1997 4
2 C R N 01/02/1997 5
3 D S O 01/02/1997 0
4 E T P 01/02/1997 0
5 A P L 01/03/1998 71
6 B Q M 01/03/1998 2
7 C R N 01/03/1998 4
8 D S O 01/03/1998 8
9 E T P 01/03/1998 0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加