データフレームがあります。次のように定義されているとしましょう。
df = pd.DataFrame({
'variable' : ["A","A","B","B","A","B","B","A"],
'id1' : [1,2,3,4,5,6,7,8],
'id2' : ['NaN','NaN',2,'NaN',4,3,'NaN',5]
})
したがって、結果は次のようになります。
id1 id2 variable1
0 1 NaN A
1 2 NaN A
2 3 2 B
3 4 NaN B
4 5 4 A
5 6 3 B
6 7 NaN B
7 8 5 A
今私が達成したいのは:
ある行が別の行id2
と等しい行を一致させid1
ます。したがって、この特定の例では、ペアの行は次のようになります。
(2、1)-なぜなら df.iloc[2]['id2'] == df.iloc[1]['id1']
その後:(4、3)、(5、2)、(7、4)
これらのペアからvariable1
、ペア内で一定であるもののみを選択します。したがって、上記のペアからは、(5、2)と(7、4)のみが残ります。
df.iloc[5]['variable1'] == df.iloc[2]['variable1']
(例はもちろん最初のペアに有効です)。
さて、これが純粋なPythonの場合、IDとの等価性をチェックするid1
とを含む2つのリストを反復処理するでしょうが、もっと配列指向の方法があるはずです...id2
variable
おそらく、重複したデータフレームを作成するとの交点を行うid1
とid2
しますか。それとも、まったく別のアイデアを検討する必要がありますか?
これはどう?
# Add index column:
df = df.reset_index()
df2 = pd.merge(
df, df
left_on="id1", right_on="id2"
).query("variable_x == variable_y")
list(df2[["index_x", "index_y"]].itertuples(index=False))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加