[英]Python Pandas: Selecting Value from row when two values in that row match a value farther up the column
標題有點令人費解,但是希望這會有所幫助。 我想在當前行的variableA
== variableB
== variableB
時檢索值的values
。 例如,對於第一行, result
將為54
因為僅在第3行中滿足這些條件。但是,如果當前行中的variableA
== variableB
,則結果將為0。示例數據:
values variableA variableB
0 134 1 3
1 12 2 6
2 43 1 2
3 54 3 3
4 16 2 7
5 37 6 6
所需結果:
values variableA variableB result
0 134 1 3 54
1 12 2 6 37
2 43 1 2 16
3 54 3 3 0
4 16 2 7 NaN
5 37 6 6 0
我的嘗試不考慮當variableA
和variableB
在當前行中匹配時的0
結果。
vars = df[['variableA', 'variableB']].values
doublematch = (vars[:, None] == vars[None, :] == vars[:, [0]]).all(-1)
df['result'] = df['values'].values @ doublematch #python3
但這顯然行不通。 謝謝!
您的示例數據不一致,因為上部數據幀中沒有第5行,而底部數據幀的索引4中將行的變量B更改為2。盡管如此,這是一個基於使用join
然后將所有重復匹配項的最后一行作為基礎的解決方案。
這是我正在使用的數據-我在您的結果數據框中添加了額外的一行。
values variableA variableB
0 134 1 3
1 12 2 6
2 43 1 2
3 54 3 3
4 16 2 7
5 37 6 6
s = df[['variableA', 'values']].set_index('variableA').squeeze()
s.rename('result', inplace=True)
df_final = df.join(s, on='variableB')
df_final.loc[df_final['variableA'] == df_final['variableB'], 'result'] = 0
df_final = df_final.reset_index().drop_duplicates('index', keep='last').set_index('index')
values variableA variableB result
index
0 134 1 3 54.0
1 12 2 6 37.0
2 43 1 2 16.0
3 54 3 3 0.0
4 16 2 7 NaN
5 37 6 6 0.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.