ええと、質問に提示されたCSVファイルやその後のコードに不備があります。
- CSVファイルの先頭行
data
はdate
の誤りだろう(後に書かれたコードから)。
- CSVファイルを読むさい、
dtype={'time': str}
を指定すべき。そのままだと数値と見なされ、time
先頭の0埋めが消えてしまう。
- pivotを得るコードが誤り。表で提示されているpivotを得るには、インデックスに
date
とitem
を指定し、valuesにnum
を指定する必要がある。
Diff
1-matrix=df.pivot(index['date','time'],columns='time',values='item')
2+matrix=df.pivot(index=['date', 'item'], columns='time', values='num')
これらを修正した上で、pivotするときにfavも一緒に読めばいい。values=['num', 'fav']
とするか、オプション引数valuesの指定を省略する(と、index, columnsに使われていない列がすべてvaluesに使われる)。
すると、num
と同様にfav
もマルチインデックスの列として構成されるので、
result
1 num fav
2time 0900 0910 0900 0910
3date item
420201010 A 3 2 BB BB
5 B 4 5 AA AA
こんな結果が得られる。もし、favをひとつにまとめたいのであれば、以下のコードの末尾あたりを参照。
Python
1import pandas as pd
2import io
3
4txt = """
5date,time,item,num,fav
620201010,0900,A,3,BB
720201010,0910,A,2,BB
820201010,0900,B,4,AA
920201010,0910,B,5,AA
10"""
11
12df = pd.read_csv(io.StringIO(txt), dtype={'time': str})
13# df = pd.read_csv('File.csv', dtype={'time': str})
14# print(df)
15
16matrix = df.pivot(index=['date', 'item'], columns='time', values=['num', 'fav'])
17# print(matrix)
18
19# favの列をひとつにする
20matrix['tmp'] = matrix.iloc[:, 2]
21matrix.drop(columns='fav', inplace=True)
22matrix.rename(columns={'tmp': 'fav'}, inplace=True)
23
24print(matrix)
result
1 num fav
2time 0900 0910
3date item
420201010 A 3 2 BB
5 B 4 5 AA
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/27 00:35
2020/11/27 01:22
2020/11/29 01:01