パンダデータフレーム内の複数行を共通キー列で結合する方法(固定長制限)- 行方向のデータを列方向に変換

How to join multiple rows in single pandas dataframe by common key column (fixed length limit)? – StackOverflow

ロングフォーマットのデータをワイドフォーマットに変換する方法として鉄板の処理方法は,まずmeltしてキー列とデータ列の1:1のデータフレームにした後,各キー要素の長さを求めて,それに基づいて列方向へ展開する.時間効率もこれが最も良い.後は,カラム名を好きにrenameすれば良いだけ.

import io
import pandas as pd


strings = """key x1 x2 x3
-------------
1   a1 a2 a3
1   b1 b2 b3
2   c1 c2 c3
3   d1 d2 d3
3   e1 e2 e3
3   f1 f2 f3
3   g1 g2 g3""".replace('-', '')

df = (
    pd.read_csv(io.StringIO(strings), sep='\s+')
    .melt(id_vars='key')
    .assign(col=lambda df: df.groupby('key').cumcount())
    .pivot(index='key', columns='col', values='value')
    .rename(columns=lambda x: f'x{x//3+1}{x%3+1}')
)
df
col x11 x12 x13 x21 x22 x23 x31 x32 x33 x41 x42 x43
key                                             
1   a1  b1  a2  b2  a3  b3  NaN NaN NaN NaN NaN NaN
2   c1  c2  c3  NaN NaN NaN NaN NaN NaN NaN NaN NaN
3   d1  e1  f1  g1  d2  e2  f2  g2  d3  e3  f3  g3
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください