結構面倒。。。
とりあえずgroupby.apply()
から呼ばれた関数内で愚直に変換する方式で書いてみましたが、どうでしょうかね。
(せめて CH が0 スタートだったらちょっと楽なのに)
Python
1import pandas as pd
2import io
3
4data = """
5timestamp,data1,data2,data3,data4,data5,data6,data7,data8
6aaa,1,2,3,4,5,6,7,8
7bbb,11,12,13,14,15,16,17,18
8"""
9
10df = pd.read_csv(io.StringIO(data))
11print(df)
12
13def f(data):
14 d = pd.DataFrame(data.loc[:, 'data1':].values.reshape(4,2))
15 d['CH'] = range(1,5)
16 return d
17
18new_df = df.groupby('timestamp', group_keys=False).apply(f).reset_index(drop=True)
19# 0 1 CH
20#0 1 2 1
21#1 3 4 2
22#2 5 6 3
23#3 7 8 4
24#4 11 12 1
25#5 13 14 2
26#6 15 16 3
27#7 17 18 4
【ちょっと間違っていたので修正】
timestampを残すにはこちらの方がよいかな
Python
1import pandas as pd
2import io
3
4data = """
5timestamp,data1,data2,data3,data4,data5,data6,data7,data8
6aaa,1,2,3,4,5,6,7,8
7bbb,11,12,13,14,15,16,17,18
8"""
9
10df = pd.read_csv(io.StringIO(data))
11print(df)
12
13def f(data):
14 return pd.DataFrame(data.loc[:, 'data1':].values.reshape(4,2))
15
16new_df = df.groupby('timestamp').apply(f).reset_index().rename(columns={'level_1':'CH'})
17new_df.CH += 1
18# timestamp CH 0 1
19#0 aaa 1 1 2
20#1 aaa 2 3 4
21#2 aaa 3 5 6
22#3 aaa 4 7 8
23#4 bbb 1 11 12
24#5 bbb 2 13 14
25#6 bbb 3 15 16
26#7 bbb 4 17 18