質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

961閲覧

python pandasデータフレームの整形

goma-goma

総合スコア39

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/10/10 09:25

pyhtonで下記表1のようなデータフレームを、
表2のように整形、修正したいと考えております。

この場合、どのようなコードを書けばよおいのか教えていただけますと助かります。

よろしくお願いします。

表1
|timestamp|data1|data2|data3|data4|data5|data6|data7|data8|
|:--|:--:|:--:|:--:|--:|
|aaa|1|2|3|4|5|6|7|8|
|bbb|11|12|13|14|15|16|17|18|

表2

timestampCHdatadata
aaa112
aaa234
aaa356
aaa478
bbb11112
bbb21314
bbb31516
bbb41718

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2019/10/10 10:11

表1から表2への変換ルールは何でしょうか? 「CH」列は何ですか?
goma-goma

2019/10/10 10:51

表1の同時刻のデータ(計8個)を2列ずつ切り出して縦に並べ、4つのCH(チャンネル)に振り分けたいと考えています。 分かりにくくて済みませんがよろしくお願いします。
meg_

2019/10/10 11:04

DataFrameにしてからの操作ですと、行毎にデータを取り出して→分割→挿入、みたいな感じでしょうか?(データ数多いと遅くなると思います) CSVファイル等から読み込んでDataFrameを作成しているのなら、DataFrameにする前に処理した方が良さそうな気がします。
guest

回答1

0

ベストアンサー

結構面倒。。。
とりあえず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

投稿2019/10/10 12:32

編集2019/10/10 15:43
magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

magichan

2019/10/10 13:03

あっゴメン group_key必用だった 後で直します
goma-goma

2019/10/10 20:48

ありがとうございます! 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問