パンダデータフレーム:同じ列値を共有する複数の行を1つの行にシフト/マージします

ボーエン劉

タイトルと混同してすみません。次のコードと写真を使用して、私の質問をより適切に説明します。

これで、複数の列を持つデータフレームができました。並べ替えの最初の2列、「ルート」と「ID」(フォーマットについては申し訳ありませんが、ここのすべての行の「ルート」値は「100」で、「ID」は1から3です。

df1.head(9)
  Route ID  Year    Vol Truck_Vol   Truck_%
0   100 1   2017.0  7016    635.0   9.1
1   100 1   2014.0  6835    NaN NaN
2   100 1   2011.0  5959    352.0   5.9
3   100 2   2018.0  15828   NaN NaN
4   100 2   2015.0  13114   2964.0  22.6
5   100 2   2009.0  11844   1280.0  10.8
6   100 3   2016.0  15434   NaN NaN
7   100 3   2013.0  18699   2015.0  10.8
8   100 3   2010.0  15903   NaN NaN

私が欲しいのは

 Route  ID  Year    Vol1    Truck_Vol1  Truck_%1    Year2   Vol2    Truck_Vol2  Truck_%2    Year3   Vol3    Truck_Vol3  Truck_%3
0   100 1   2017    7016    635.0   9.1 2014    6835    NaN NaN 2011    5959    352.0   5.9
1   100 2   2018    15828   NaN NaN 2015    13114   2964.0  22.6    2009    11844   1280.0  10.8
2   100 3   2016    15434   NaN NaN 2013    18699   2015.0  10.8    2010    15903   NaN NaN

繰り返しになりますが、フォーマットが乱雑になってすみません。簡略版を試してみましょう。

入力:

  Route ID  Year    Vol T_%
0   100 1   2017    100 1.0
1   100 1   2014    200 NaN
2   100 1   2011    300 2.0
3   100 2   2018    400 NaN
4   100 2   2015    500 3.0
5   100 2   2009    600 4.0

必要な出力:

Route   ID  Year    Vol T_% Year.1  Vol.1   T_%.1   Year.2  Vol.2   T_%.2
0   100 1   2017    100 1.0 2014    200     NaN     2011    300      2
1   100 2   2018    400 NaN 2015    500     3.0     2009    600      4

つまり、基本的には写真に示されているセルを移動するだけです

入力

出力

私はここで困惑しています。新しく生成された列の名前は重要ではありません。

この現在のデータフレームでは、コードに示されているように、「グループ」ごとに3つの行があります。答えが各グループの任意の数の行に対応できれば素晴らしいでしょう。

御時間ありがとうございます。

ALollz

groupby+ cumcount+ set_index+unstack

df1 = df.assign(cid = df.groupby(['Route', 'ID']).cumcount()).set_index(['Route', 'ID', 'cid']).unstack(-1).sort_index(1,1)
df1.columns = [f'{x}{y}' for x,y in df1.columns]
df1 = df1.reset_index()

出力df1

   Route  ID  T_%0  Vol0  Year0  T_%1  Vol1  Year1  T_%2  Vol2  Year2
0    100   1   1.0   100   2017   NaN   200   2014   2.0   300   2011
1    100   2   NaN   400   2018   3.0   500   2015   4.0   600   2009

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パンダ:列の値に基づいて2つのデータフレームをマージします。同じ列値を含む複数の行の場合、それらを異なる列に追加します

分類Dev

同じデータフレームパンダで複数の列を1つの列に結合する

分類Dev

パンダの1つの行に同じ値を持つ複数の行をマージします

分類Dev

同じパンダデータフレームの列の値に基づいて行を複製する方法

分類Dev

開始列と終了列を持つ同じパンダデータフレーム内の重複する間隔を効率的にマージします

分類Dev

パンダ:重複する行を持つ2つのデータフレームをマージします

分類Dev

パンダは、列の同じ値に基づいてデータフレームをマージします

分類Dev

パンダ:1つの列で同じ列名を持つ複数のデータフレームをマージする方法は?

分類Dev

1つの列(または複数の列)の欠落値を補うためにパンダデータフレームに行を生成する

分類Dev

パンダを使用して複数のデータフレームを1つにマージします

分類Dev

パンダを使用して複数のデータフレームを1つにマージします

分類Dev

複数のバイナリエンコードされた行をパンダデータフレームの1つにマージします

分類Dev

パンダ複数の値を持つ行データを列のPythonリストにマージします

分類Dev

パンダの同じデータフレーム内の列の値をマージします

分類Dev

複数の行をデータフレーム列の1つの行にマージする

分類Dev

パンダで同じ列値を持つデータフレームの行を検索する

分類Dev

パンダは、別のデータフレームの列の行と共通の値を共有する1つのデータフレームの行をドロップします

分類Dev

パンダのマージ:同じ列の2つのデータフレームをマージしますが、異なる列を保持します

分類Dev

同じインデックスパンダを使用して2つのデータフレームを行ごとにマージします

分類Dev

同じパンダデータフレームの2つの列をマージします

分類Dev

Python、パンダで別のデータフレームの複数の列を使用して1つのデータフレームの行を選択する

分類Dev

パンダは同じデータフレーム内の複数の列でgroupbyをマップします

分類Dev

パンダは、一致する複数の列値に基づいて2つのデータフレームをマージします

分類Dev

行と列の値が同じ場合にのみ、2つのパンダデータフレーム値を追加します

分類Dev

パンダデータフレームの複数の行を1つの行に連結する方法

分類Dev

パンダデータフレームの複数の行を1つの行に連結する方法

分類Dev

パンダ:同じ列値を持つ複数の行を組み合わせて、すべての可能性をカバーする新しいデータフレームを作成するにはどうすればよいですか?

分類Dev

同じ値のペアを持つが、2つのデータフレームで異なる順序で表示される2つの列に基づいてパンダのデータフレームをマージします

分類Dev

Python-パンダ-カテゴリ値に基づいて、データフレーム内で複数の列の行を1つの行に結合する

Related 関連記事

  1. 1

    パンダ:列の値に基づいて2つのデータフレームをマージします。同じ列値を含む複数の行の場合、それらを異なる列に追加します

  2. 2

    同じデータフレームパンダで複数の列を1つの列に結合する

  3. 3

    パンダの1つの行に同じ値を持つ複数の行をマージします

  4. 4

    同じパンダデータフレームの列の値に基づいて行を複製する方法

  5. 5

    開始列と終了列を持つ同じパンダデータフレーム内の重複する間隔を効率的にマージします

  6. 6

    パンダ:重複する行を持つ2つのデータフレームをマージします

  7. 7

    パンダは、列の同じ値に基づいてデータフレームをマージします

  8. 8

    パンダ:1つの列で同じ列名を持つ複数のデータフレームをマージする方法は?

  9. 9

    1つの列(または複数の列)の欠落値を補うためにパンダデータフレームに行を生成する

  10. 10

    パンダを使用して複数のデータフレームを1つにマージします

  11. 11

    パンダを使用して複数のデータフレームを1つにマージします

  12. 12

    複数のバイナリエンコードされた行をパンダデータフレームの1つにマージします

  13. 13

    パンダ複数の値を持つ行データを列のPythonリストにマージします

  14. 14

    パンダの同じデータフレーム内の列の値をマージします

  15. 15

    複数の行をデータフレーム列の1つの行にマージする

  16. 16

    パンダで同じ列値を持つデータフレームの行を検索する

  17. 17

    パンダは、別のデータフレームの列の行と共通の値を共有する1つのデータフレームの行をドロップします

  18. 18

    パンダのマージ:同じ列の2つのデータフレームをマージしますが、異なる列を保持します

  19. 19

    同じインデックスパンダを使用して2つのデータフレームを行ごとにマージします

  20. 20

    同じパンダデータフレームの2つの列をマージします

  21. 21

    Python、パンダで別のデータフレームの複数の列を使用して1つのデータフレームの行を選択する

  22. 22

    パンダは同じデータフレーム内の複数の列でgroupbyをマップします

  23. 23

    パンダは、一致する複数の列値に基づいて2つのデータフレームをマージします

  24. 24

    行と列の値が同じ場合にのみ、2つのパンダデータフレーム値を追加します

  25. 25

    パンダデータフレームの複数の行を1つの行に連結する方法

  26. 26

    パンダデータフレームの複数の行を1つの行に連結する方法

  27. 27

    パンダ:同じ列値を持つ複数の行を組み合わせて、すべての可能性をカバーする新しいデータフレームを作成するにはどうすればよいですか?

  28. 28

    同じ値のペアを持つが、2つのデータフレームで異なる順序で表示される2つの列に基づいてパンダのデータフレームをマージします

  29. 29

    Python-パンダ-カテゴリ値に基づいて、データフレーム内で複数の列の行を1つの行に結合する

ホットタグ

アーカイブ