0

品質基準に一致するように質問を作り直そうとし、自分で結果を達成するために多くの時間を費やしました.

与えられた 2 つの DataFrames

a = DataFrame({"id" : ["id1"] * 3 + ["id2"] * 3 + ["id3"] * 3,
               "left" : [6, 2, 5, 2, 1, 4, 5, 2, 4],
               "right" : [1, 3, 4, 6, 5, 3, 6, 3, 2]               
             })

b = DataFrame({"id" : ["id1"] * 6 + ["id2"] * 6 + ["id3"] * 6,
               "left_and_right" : range(1,7) * 3,  
               "boolen" : [0, 0, 1, 0, 1, 0, 1, 0, 0 , 1, 1, 0, 0, 0, 1, 0, 0, 1]
             })

期待される結果は

result = DataFrame({"id" : ["id1"] * 3 + ["id2"] * 3 + ["id3"] * 3,
                    "left"  : [6, 2, 5, 2, 1, 4, 5, 2, 4],
                    "right"  : [1, 3, 4, 6, 5, 3, 6, 3, 2],
                    "NEW": [0, 1, 1, 0, 1, 1, 1, 1, 0]               
                  })

したがって、DataFrame a に a.id == b.id の行がある場合、DataFrame b の各行をチェックインし、b.left_and_right が (==) a.left OR a.right にあるかどうかを調べます。
そのような行が見つかり、b.bolen が a.left または a.right のいずれかの値に対して True/1 である場合、この行の a.NEW の値も True/1 になります。

例が私の言葉よりもそれをよりよく示していることを願っています.

要約すると、idが両方のDataFrameで同じである各行で、b.left_and_rightの値に対してb.bolenがTrue/1であるかどうか、およびこの値がa.leftまたはaにあるかどうかを調べたいと思います。そうです、a.NEW の新しい値も TRUE/1 である必要があります。

& および | と組み合わせて pd.match() および pd.merge() 関数を使用してみました。オペレーターが必要な結果を達成できませんでした。

しばらく前に、R で同様の問題を扱う非常によく似た質問をしたことがありました (データは少し別の方法で編成されていたため、少し異なっていました) が、Python で同じアプローチを使用して失敗しました。
関連する質問:複数列の data.frames を使用した 2 つのリストの条件付き一致

ありがとう

4

1 に答える 1