Python + Pandasの2つの列を結合します

フィリップ

私は次のように配置されたdfを持っています:

   x    y    z
0  a   jj  Nan
1  b   ii   mm
2  c   kk   nn
3  d   ii  NaN
4  e  Nan   oo
5  f   jj   mm
6  g  Nan   nn

必要な出力は次のとおりです。

   x    y    z   w
0  a   jj  Nan   a
1  b   ii   mm   a
2  c   kk   nn   c
3  d   ii  NaN   a
4  e  Nan   oo   e
5  f   jj   mm   a
6  g  Nan   nn   c

論理は

  1. 列yとzの和集合を取る:ii == jjインデックス1と5では、両方ともmm列zにあるため

  2. このユニオンをグループ化する:インデックス0、1、3、5はグループ、インデックス2、6は別のグループ

  3. グループ内で、列xの1つのセルをランダムに取得し、グループ全体の列wに割り当てます。

私はこの問題について全く手がかりがありません。誰かが私を助けることができますか?

編集:

私は最初、次のように完全にソートされた列yと列zを投稿しました。

   x    y    z   w
0  a   ii  NaN   a
1  b   ii   mm   a
2  c   jj   mm   a
3  d   jj  Nan   a
4  e   kk   nn   e
5  f  Nan   nn   e
6  g  Nan   oo   g

この場合、piRSquaredのソリューションは完璧に機能します。

EDITNOTE2:

Nickil Maveliのソリューションは、私の問題に最適です。ただし、ソリューションが処理できない状況があることに気づきました。つまり、次のとおりです。

   x   y   z
0  a  ii  mm
1  b  ii  nn
2  c  jj  nn
3  d  jj  oo
4  e  kk  oo

Nickil Maveliのソリューションによると、結果は次のようになります。

   0   1   2  w
0  a  ii  mm  a
1  b  ii  mm  a
2  c  jj  nn  c
3  d  jj  nn  c
4  e  kk  oo  e

ただし、必要な出力はw = ['a'、 'a'、 'a'、 'a'、 'a']である必要があります。

DSM

一般的なケースでは、これはセットの統合/連結成分の問題です。あなたのデータについて特定のことを想定すれば、削減されたケースを解決することができますが、すべてを行うのはほんの少しの簿記です。

scipyには、準備を行う場合に使用できる連結成分関数があります。

import scipy.sparse

def via_cc(df_in):
    df = df_in.copy()

    # work with ranked version
    dfr = df[["y","z"]].rank(method='dense')
    # give nans their own temporary rank
    dfr = dfr.fillna(dfr.max().fillna(0) + dfr.isnull().cumsum(axis=0))
    # don't let y and z get mixed up; have separate nodes per column
    dfr["z"] += dfr["y"].max() 

    # build the adjacency matrix
    size = int(dfr.max().max()) + 1
    m = scipy.sparse.coo_matrix(([1]*len(dfr), (dfr.y, dfr.z)),
                                (size, size))

    # do the work to find the groups
    _, cc = scipy.sparse.csgraph.connected_components(m)

    # get the group codes
    group = pd.Series(cc[dfr["y"].astype(int).values], index=dfr.index)
    # fill in w from x appropriately
    df["w"] = df["x"].groupby(group).transform(min)

    return df

それは私に

In [230]: via_cc(df0)
Out[230]: 
   x    y    z  w
0  a   jj  NaN  a
1  b   ii   mm  a
2  c   kk   nn  c
3  d   ii  NaN  a
4  e  NaN   oo  e
5  f   jj   mm  a
6  g  NaN   nn  c

In [231]: via_cc(df1)
Out[231]: 
   x   y   z  w
0  a  ii  mm  a
1  b  ii  nn  a
2  c  jj  nn  a
3  d  jj  oo  a
4  e  kk  oo  a

ここにあるような設定された統合レシピがある場合は、外部関数を犠牲にして上記のいくつかを単純化できます。

(余談ですが、私のdf0では、「Nan」は実際にはNaNです。文字列「Nan」がある場合(NaNとの違いに注意してください)、コードはそれが単なる別の文字列であると見なし、必要なものと見なします。すべての「ナン」は同じグループに属します。)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Python DataFrameは、タイプpandas.core.series.Seriesの2つの列を1つの列に結合します

分類Dev

pandas / pythonを使用して2つのcsvを結合/マージします

分類Dev

Python Pandas:2つのデータフレームをインデックスで結合し、同じ名前の列を結合します

分類Dev

python / pandas-2つの列を検索して結果を取得します

分類Dev

2つの文字列を結合してから、整数に変換します。Python

分類Dev

Pythonは複数の列を1つに結合します

分類Dev

Excelファイルの2つの列を照合し、他の列の値を取得します-Python Pandas

分類Dev

Pythonは1つの共通の列で2つのフレームを結合します

分類Dev

2つの日付の間の日付の場合、Python Pandasは列の値を合計します

分類Dev

Pythonは、最初の列のキーに基づいて2つの列を結合します

分類Dev

Python Pandasは、データを結合または整形して、値が繰り返される2つの新しい列を追加します

分類Dev

Python Pandasの2つの列(両方向)の組み合わせの数を合計します

分類Dev

Pandas / Pythonのある時点以降のすべての列を結合します

分類Dev

Python Pandasを使用して、範囲基準で2つのテーブルを結合します

分類Dev

Python Pandasは、一連の文字列を1つの文字列に連結します

分類Dev

Pythonは配列を2つの結果に出力します

分類Dev

Pythonで2つの列を連結します

分類Dev

Pythonの一般的な列に2つのデータフレームを結合します

分類Dev

Pythonで2つの日付列を1つに結合する

分類Dev

Pythonで2つの配列を1つに結合する

分類Dev

Python Pandas:2つのデータフレームを結合し、1つのフレームの列を最終結果のインデックスとして使用します

分類Dev

Python Sparkは2つのデータフレームを結合し、列を埋めます

分類Dev

Python:2つの配列を1つの空で連結します

分類Dev

Pythonを使用して3つの文字列を1つのブロックに結合します

分類Dev

Python:2つのbytearrayオブジェクトを結合します

分類Dev

Python-2つの単一列リストを1つの二重列リストに結合して印刷します

分類Dev

複数の列を2つの別々の列に折りたたむ(または結合する)python

分類Dev

Python Pandas:一意の列値に結合して連結します

分類Dev

Pythonで2つのリストを1つの配列に結合する

Related 関連記事

  1. 1

    Python DataFrameは、タイプpandas.core.series.Seriesの2つの列を1つの列に結合します

  2. 2

    pandas / pythonを使用して2つのcsvを結合/マージします

  3. 3

    Python Pandas:2つのデータフレームをインデックスで結合し、同じ名前の列を結合します

  4. 4

    python / pandas-2つの列を検索して結果を取得します

  5. 5

    2つの文字列を結合してから、整数に変換します。Python

  6. 6

    Pythonは複数の列を1つに結合します

  7. 7

    Excelファイルの2つの列を照合し、他の列の値を取得します-Python Pandas

  8. 8

    Pythonは1つの共通の列で2つのフレームを結合します

  9. 9

    2つの日付の間の日付の場合、Python Pandasは列の値を合計します

  10. 10

    Pythonは、最初の列のキーに基づいて2つの列を結合します

  11. 11

    Python Pandasは、データを結合または整形して、値が繰り返される2つの新しい列を追加します

  12. 12

    Python Pandasの2つの列(両方向)の組み合わせの数を合計します

  13. 13

    Pandas / Pythonのある時点以降のすべての列を結合します

  14. 14

    Python Pandasを使用して、範囲基準で2つのテーブルを結合します

  15. 15

    Python Pandasは、一連の文字列を1つの文字列に連結します

  16. 16

    Pythonは配列を2つの結果に出力します

  17. 17

    Pythonで2つの列を連結します

  18. 18

    Pythonの一般的な列に2つのデータフレームを結合します

  19. 19

    Pythonで2つの日付列を1つに結合する

  20. 20

    Pythonで2つの配列を1つに結合する

  21. 21

    Python Pandas:2つのデータフレームを結合し、1つのフレームの列を最終結果のインデックスとして使用します

  22. 22

    Python Sparkは2つのデータフレームを結合し、列を埋めます

  23. 23

    Python:2つの配列を1つの空で連結します

  24. 24

    Pythonを使用して3つの文字列を1つのブロックに結合します

  25. 25

    Python:2つのbytearrayオブジェクトを結合します

  26. 26

    Python-2つの単一列リストを1つの二重列リストに結合して印刷します

  27. 27

    複数の列を2つの別々の列に折りたたむ(または結合する)python

  28. 28

    Python Pandas:一意の列値に結合して連結します

  29. 29

    Pythonで2つのリストを1つの配列に結合する

ホットタグ

アーカイブ