パンダ:データフレームの列を別々の行に分割する

小さい鳥

このSOの質問に基づいて、列に基づいてデータフレームを分割したいと思いますvar1ただし、文字の間に区切り文字はありません。

import pandas as pd
a = pd.DataFrame([{'var1': 'abc', 'var2': 1},
                  {'var1': 'def', 'var2': 2}])
b = pd.DataFrame([{'var1': 'a', 'var2': 1},
                  {'var1': 'b', 'var2': 1},
                  {'var1': 'c', 'var2': 1},
                  {'var1': 'd', 'var2': 2},
                  {'var1': 'e', 'var2': 2},
                  {'var1': 'f', 'var2': 2}])

これが私が達成したいことです。

>>> a
  var1  var2
0  abc     1
1  def     2
>>> b
  var1  var2
0    a     1
1    b     1
2    c     1
3    d     2
4    e     2
5    f     2

.split() 空の文字( "")では機能しません。

pd.concat([Series(row['var2'], row['var1'].split(','))              
                  for _, row in a.iterrows()]).reset_index()

したがって、上記は機能しません。どうすればそれを達成できるか考えていますか?

ジェズリール

パフォーマンスが重要な場合は、リスト内包表記を使用してください。

df = pd.DataFrame([[x, j] for i, j in zip(a['var1'], a['var2']) for x in list(i)], 
                   columns=a.columns)
print (df)
  var1  var2
0    a     1
1    b     1
2    c     1
3    d     2
4    e     2
5    f     2

小さなDataFrameのパフォーマンス:

In [215]: %timeit pd.DataFrame([[x, j] for i, j in zip(a['var1'], a['var2']) for x in list(i)], columns=a.columns)
355 µs ± 4.08 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [216]: %timeit pd.concat([pd.Series(row['var2'], list(row['var1'])) for _, row in a.iterrows()]).reset_index()
2.93 ms ± 203 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

#2k rows
a = pd.concat([a] * 1000, ignore_index=True)

In [217]: %timeit pd.DataFrame([[x, j] for i, j in zip(a['var1'], a['var2']) for x in list(i)], columns=a.columns)
2.82 ms ± 23.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [218]: %timeit pd.concat([pd.Series(row['var2'], list(row['var1'])) for _, row in a.iterrows()]).reset_index()
1.8 s ± 140 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

編集:

複数の列の一般的な解決策:

a = pd.DataFrame([{'var1': 'abc', 'var2': 1, 'var3':7},
                  {'var1': 'def', 'var2': 2, 'var3':5}])


b = pd.DataFrame([(y, *x[1:]) for x in a.values.tolist() for y in list(x[0])], 
                  columns=a.columns)
print (b)
  var1  var2  var3
0    a     1     7
1    b     1     7
2    c     1     7
3    d     2     5
4    e     2     5
5    f     2     5

#lower python versions
b = pd.DataFrame([(y,) + tuple(x[1:]) for x in a.values.tolist() for y in list(x[0])], 
                  columns=a.columns)
print (b)
  var1  var2  var3
0    a     1     7
1    b     1     7
2    c     1     7
3    d     2     5
4    e     2     5
5    f     2     5

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

パンダのデータフレーム文字列を個別の行に分割する

分類Dev

列を改行で分割して、パンダのデータフレームを別々の行に分解します

分類Dev

パンダのデータフレーム列を行の値で分割する

分類Dev

区切り文字の複数の列をパンダデータフレームの行に分割する

分類Dev

別のデータフレームからパンダのデータフレームに行を追加する

分類Dev

別のデータフレームからパンダのデータフレームに行を追加する

分類Dev

パンダのあるデータフレームの行を別のデータフレームの列に転置する最適な方法は?

分類Dev

パンダは別のデータフレームからの条件に基づいて行を分割します

分類Dev

パンダ:特定の列の文字列値に基づいて、データフレームを個別のデータフレームに分割します

分類Dev

パンダデータフレーム - 複数の列に分割する文字列

分類Dev

パンダは、あるデータフレームの行を更新して、別のデータフレームのキー列に追加します

分類Dev

データフレームパンダの特定の行に列を追加する

分類Dev

パンダのデータフレームを別々のグループに分割する

分類Dev

パンダのデータフレームで特定の名前の列を複数の列に分割する

分類Dev

セルの最初の文字の後にパンダのデータフレーム列を(2つに)分割する

分類Dev

パンダデータフレームの行を列に変換する

分類Dev

複数の値を持つパンダデータフレーム列文字列を別々の行に分割します

分類Dev

JSON要素をパンダデータフレームの列に分割します

分類Dev

パンダのデータフレームから別の複数の行に1行をコピーする

分類Dev

パンダでデータフレーム列を2つの別の列に分割するにはどうすればよいですか?

分類Dev

条件に基づいてパンダデータフレーム列の特殊文字の文字列を分割する

分類Dev

パンダのデータフレーム列リスト値を分割して行を複製する

分類Dev

列の値の違いに基づいてパンダのデータフレームを分割する方法

分類Dev

検索された列の値までのパンダのデータフレーム行を新しいデータフレームに分割します

分類Dev

パンダのデータフレームでセルを複数の行に分割する

分類Dev

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

分類Dev

パンダのデータフレームを別のタブに表示する

分類Dev

パンダ:行を別のデータフレームに置き換える

分類Dev

csvファイルを複数の列でパンダデータフレームに分割する

Related 関連記事

  1. 1

    パンダのデータフレーム文字列を個別の行に分割する

  2. 2

    列を改行で分割して、パンダのデータフレームを別々の行に分解します

  3. 3

    パンダのデータフレーム列を行の値で分割する

  4. 4

    区切り文字の複数の列をパンダデータフレームの行に分割する

  5. 5

    別のデータフレームからパンダのデータフレームに行を追加する

  6. 6

    別のデータフレームからパンダのデータフレームに行を追加する

  7. 7

    パンダのあるデータフレームの行を別のデータフレームの列に転置する最適な方法は?

  8. 8

    パンダは別のデータフレームからの条件に基づいて行を分割します

  9. 9

    パンダ:特定の列の文字列値に基づいて、データフレームを個別のデータフレームに分割します

  10. 10

    パンダデータフレーム - 複数の列に分割する文字列

  11. 11

    パンダは、あるデータフレームの行を更新して、別のデータフレームのキー列に追加します

  12. 12

    データフレームパンダの特定の行に列を追加する

  13. 13

    パンダのデータフレームを別々のグループに分割する

  14. 14

    パンダのデータフレームで特定の名前の列を複数の列に分割する

  15. 15

    セルの最初の文字の後にパンダのデータフレーム列を(2つに)分割する

  16. 16

    パンダデータフレームの行を列に変換する

  17. 17

    複数の値を持つパンダデータフレーム列文字列を別々の行に分割します

  18. 18

    JSON要素をパンダデータフレームの列に分割します

  19. 19

    パンダのデータフレームから別の複数の行に1行をコピーする

  20. 20

    パンダでデータフレーム列を2つの別の列に分割するにはどうすればよいですか?

  21. 21

    条件に基づいてパンダデータフレーム列の特殊文字の文字列を分割する

  22. 22

    パンダのデータフレーム列リスト値を分割して行を複製する

  23. 23

    列の値の違いに基づいてパンダのデータフレームを分割する方法

  24. 24

    検索された列の値までのパンダのデータフレーム行を新しいデータフレームに分割します

  25. 25

    パンダのデータフレームでセルを複数の行に分割する

  26. 26

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

  27. 27

    パンダのデータフレームを別のタブに表示する

  28. 28

    パンダ:行を別のデータフレームに置き換える

  29. 29

    csvファイルを複数の列でパンダデータフレームに分割する

ホットタグ

アーカイブ