17

次のようなデータフレームがあります。

ここに画像の説明を入力

各ユーザーには 10 個のレコードがあります。今、次のようなデータフレームを作成したいと思います。

userid  name1  name2  ... name10

つまり、列の 10 レコードごとに反転nameし、新しいデータフレームに追加する必要があります。

それで、それはどのように行うのですか?パンダでそれを行う方法はありますか?

4

2 に答える 2

18

groupby('userid')次にreset_index、各グループ内で、グループ間で一貫して列挙します。次にunstack、列を取得します。

df.groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack()

デモンストレーション

df = pd.DataFrame([
        [123, 'abc'],
        [123, 'abc'],
        [456, 'def'],
        [123, 'abc'],
        [123, 'abc'],
        [456, 'def'],
        [456, 'def'],
        [456, 'def'],
    ], columns=['userid', 'name'])

df.sort_values('userid').groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack()

ここに画像の説明を入力

useridをインデックスにしたくない場合はreset_index、末尾に追加します。

df.sort_values('userid').groupby('userid')['name'].apply(lambda df: df.reset_index(drop=True)).unstack().reset_index()

ここに画像の説明を入力

于 2016-07-14T08:54:53.293 に答える