既存の列に基づいて、データフレームに複数の行と単一の列を追加します

スタンコ

新しい行を追加し、既存の列に基づいて新しい列を追加したいと思います。たとえば、次のデータフレームがあるとします。

   A          B
   1          a
   2          b
   3          c
   4          b

そして、キーとして一意の列Bの値を持つ辞書。各キーは値のリストに関連付けられています。これらの値は、新しい行と列に使用されます。{a: [x, y, z], b: [x, w, r], c: [x, q]}

変換により、次のデータフレームが生成されます。

   A          C          
   1          x
   1          y
   1          z
   2          x
   2          w
   2          r
   3          x
   3          q
   4          x
   4          w
   4          r

新しい列を追加する方法は知っていますが、行を複製しようとして立ち往生しています。この問題に対する最も効率的な解決策は何ですか?既存のデータフレームを更新しますか、それとも新しいデータフレームを作成しますか?

更新

この操作は、Daskを使用する大規模なデータフレーム(2,000万行以上)で使用されます。

ジェズリール

私は新しいの作成をお勧めmapnp.repeatchain.from_iterable

d = {'a': ['x', 'y', 'z'], 'b': ['x', 'w', 'r'], 'c': ['x', 'q']}

s = df['B'].map(d)
lens = [len(x) for x in s]

from itertools import chain

df = pd.DataFrame({
    'A' : df['A'].values.repeat(lens),
    'C' : list(chain.from_iterable(s.values.tolist()))
})
print (df)
    A  C
0   1  x
1   1  y
2   1  z
3   2  x
4   2  w
5   2  r
6   3  x
7   3  q
8   4  x
9   4  w
10  4  r

辞書の一部の値が一致しない場合に機能するより一般的なソリューション:

map欠落した値を返すため、最初のソリューションはエラーを返します。

TypeError:タイプ 'NoneType'のオブジェクトにlen()がありません

print (df)
   A  B
0  1  d <- change data
1  2  b
2  3  c
3  4  b

d = {'a': ['x', 'y', 'z'], 'b': ['x', 'w', 'r'], 'c': ['x', 'q']}

s = [d.get(x, [x]) for x in df['B']]
print (s)
[['d'], ['x', 'w', 'r'], ['x', 'q'], ['x', 'w', 'r']]

lens = [len(x) for x in s]

from itertools import chain

df = pd.DataFrame({
    'A' : df['A'].values.repeat(lens),
    'B' : list(chain.from_iterable(s))
})
print (df)
   A  B
0  1  d
1  2  x
2  2  w
3  2  r
4  3  x
5  3  q
6  4  x
7  4  w
8  4  r

を使用するためdask、別の解決策は次のようになります。

d = {'a': ['x', 'y', 'z'], 'b': ['x', 'w', 'r'], 'c': ['x', 'q']}
df1 = pd.DataFrame([(k, y) for k, v in d.items() for y in v], columns=['B','C'])
print (df1)
   B  C
0  a  x
1  a  y
2  a  z
3  b  x
4  b  w
5  b  r
6  c  x
7  c  q

df = df.merge(df1, on='B', how='left')
print (df)
    A  B  C
0   1  a  x
1   1  a  y
2   1  a  z
3   2  b  x
4   2  b  w
5   2  b  r
6   3  c  x
7   3  c  q
8   4  b  x
9   4  b  w
10  4  b  r

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

dplyrデータフレームの単一の列に基づいて複数の列を変更します

分類Dev

複数の列と行の基準に基づいてRデータフレームを展開します

分類Dev

Rの条件に基づいて、データフレームに複数の新しい列を追加します

分類Dev

前の複数の行/列の値に基づいてデータフレームの行を削除します

分類Dev

既存の列のカテゴリ値に基づいてデータフレームに列を追加します

分類Dev

列の複数の値に基づいてデータフレームに新しい行を作成します

分類Dev

リストとデータフレームに基づいて複数の条件を持つデータフレームに新しい列を追加します

分類Dev

複数の列の値に基づいてデータフレームに新しい列を追加する

分類Dev

pandas-複数の行の値に基づいて、合計された列データの行をデータフレームに追加します

分類Dev

1つの列に基づいて複数のデータフレームを追加します

分類Dev

複数の列間の接続に基づいて、データフレームの行を削除します

分類Dev

複数の列に基づいてRのデータフレーム行を結合します

分類Dev

複数の列としきい値に基づいてデータフレームをマージします

分類Dev

Python-パンダ-データフレーム-条件に基づいて単一の列を複数のブール列に分解します

分類Dev

Daskデータフレーム-区切り文字に基づいて列を複数の行に分割します

分類Dev

既存の列の値に基づいてpandasデータフレームに新しい列を追加する

分類Dev

列名に基づいてデータフレームに行を追加し、空の列にNAを追加します

分類Dev

複数の列の値に基づいて新しいデータフレーム列を作成します

分類Dev

既存の列の条件に基づいて、データフレームに新しい列を作成します

分類Dev

行の最初の値に基づいて、データフレームに新しい列を追加します

分類Dev

単一の列の値に基づいてデータフレーム列に値を追加する

分類Dev

Pandasデータフレーム-複数の条件計算に基づいて複数の列を作成します

分類Dev

パンダ:連鎖操作として、既存のデータに基づいてデータフレームに列を追加します

分類Dev

特定の条件に基づいて、データフレームの1つの列のすべての行を複数の列に転置します

分類Dev

複数の行を列の値ごとに1つの行に結合し、複数の列について、連結された行の数に基づいて複数のデータフレームに分割します

分類Dev

データフレーム内の既存の時間列に基づいて新しい列を作成します

分類Dev

列名の複数の基準に基づいてデータフレーム列を抽出します

分類Dev

R-既存の列と一致する値のインデックスに基づいて新しい列データフレームを作成します

分類Dev

2つのデータフレームからの2つの既存の列間の一致に基づいて頻度を追加します

Related 関連記事

  1. 1

    dplyrデータフレームの単一の列に基づいて複数の列を変更します

  2. 2

    複数の列と行の基準に基づいてRデータフレームを展開します

  3. 3

    Rの条件に基づいて、データフレームに複数の新しい列を追加します

  4. 4

    前の複数の行/列の値に基づいてデータフレームの行を削除します

  5. 5

    既存の列のカテゴリ値に基づいてデータフレームに列を追加します

  6. 6

    列の複数の値に基づいてデータフレームに新しい行を作成します

  7. 7

    リストとデータフレームに基づいて複数の条件を持つデータフレームに新しい列を追加します

  8. 8

    複数の列の値に基づいてデータフレームに新しい列を追加する

  9. 9

    pandas-複数の行の値に基づいて、合計された列データの行をデータフレームに追加します

  10. 10

    1つの列に基づいて複数のデータフレームを追加します

  11. 11

    複数の列間の接続に基づいて、データフレームの行を削除します

  12. 12

    複数の列に基づいてRのデータフレーム行を結合します

  13. 13

    複数の列としきい値に基づいてデータフレームをマージします

  14. 14

    Python-パンダ-データフレーム-条件に基づいて単一の列を複数のブール列に分解します

  15. 15

    Daskデータフレーム-区切り文字に基づいて列を複数の行に分割します

  16. 16

    既存の列の値に基づいてpandasデータフレームに新しい列を追加する

  17. 17

    列名に基づいてデータフレームに行を追加し、空の列にNAを追加します

  18. 18

    複数の列の値に基づいて新しいデータフレーム列を作成します

  19. 19

    既存の列の条件に基づいて、データフレームに新しい列を作成します

  20. 20

    行の最初の値に基づいて、データフレームに新しい列を追加します

  21. 21

    単一の列の値に基づいてデータフレーム列に値を追加する

  22. 22

    Pandasデータフレーム-複数の条件計算に基づいて複数の列を作成します

  23. 23

    パンダ:連鎖操作として、既存のデータに基づいてデータフレームに列を追加します

  24. 24

    特定の条件に基づいて、データフレームの1つの列のすべての行を複数の列に転置します

  25. 25

    複数の行を列の値ごとに1つの行に結合し、複数の列について、連結された行の数に基づいて複数のデータフレームに分割します

  26. 26

    データフレーム内の既存の時間列に基づいて新しい列を作成します

  27. 27

    列名の複数の基準に基づいてデータフレーム列を抽出します

  28. 28

    R-既存の列と一致する値のインデックスに基づいて新しい列データフレームを作成します

  29. 29

    2つのデータフレームからの2つの既存の列間の一致に基づいて頻度を追加します

ホットタグ

アーカイブ