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

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

新規登録して質問してみよう
ただいま回答率
85.46%
データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

pandas

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

1回答

891閲覧

pandasのデータフレームで列を規則性に従い結合させたいです。

oobutamaru

総合スコア32

データバインディング

データソースと、アプリケーションやウェブページ(ウェブアプリケーション)のユーザインタフェースを静的または動的に結合する技術です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

pandas

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2021/10/07 00:25

前提・実現したいこと

pandasのデータフレームで列を規則性に従い結合させたいです。
ご教示頂ければ幸いです。
(1000,71)のデータがあり
columns = ['No','Code','あ', 'い', 'う','あ.1', 'い.1', 'う.1','あ.2',
'い.2', 'う.2',......'あ.10', 'い.10', 'う.10', 'あ.12',
'い.12', 'う.12',....]と数字は規則性はなく、10の次が12など飛び飛びです。

あ.n,い.n,う.nの3列をあらたに結合させ[Pn]とした列を作成したいです。nは連続値でかまいません。
結合のさせ方はtest["P0"] = test['あ'] + "," + test['い'] +"," + test['う']
'あ', 'い', 'う'の列は[P0]としたい。
理想となるcolumns は['No','Code','P0','P1'......'Pn']です。

列に入っている文字はstr型です。

どうにもやり方がわかりませんので、ご教示頂ければ幸いです。

該当のソースコード

Python

試したこと

まったく

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

単純に2列目~最後まで3列ずつ処理してやればよいのではないでしょうか。

Python

1import pandas as pd 2from io import StringIO 3 4s = """No,Code,a,b,c,a.2,b.2,c.2 51,10,a10,b10,c10,a12,b12,c12 62,20,a20,b20,c20,a22,b22,c22""" 7df = pd.read_csv(StringIO(s)) 8print(df) 9# No Code a b c a.2 b.2 c.2 10#0 1 10 a10 b10 c10 a12 b12 c12 11#1 2 20 a20 b20 c20 a22 b22 c22 12 13ncol = len(df.columns) 14for i,c in enumerate(range(2,ncol,3)): 15 #df[f'P{i}'] = df.iloc[:,c] + ',' + df.iloc[:,c+1] + ',' + df.iloc[:,c+2] 16 df[f'P{i}'] = df.iloc[:,[c,c+1,c+2]].apply(lambda r:','.join(r), axis=1) 17 18df = df.drop(columns=[df.columns[i] for i in range(2,ncol)]) 19print(df) 20# No Code P0 P1 21#0 1 10 a10,b10,c10 a12,b12,c12 22#1 2 20 a20,b20,c20 a22,b22,c22

投稿2021/10/07 01:11

can110

総合スコア38278

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

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

oobutamaru

2021/10/07 01:38

ありがとうございます。 非常に助かりました。 range(2,ncol,3)):やdf.iloc[:,[c,c+1,c+2]].apply(lambda r:','.join(r), axis=1) こういった使い方を覚えておきます。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問