簡體   English   中英

Python Pandas:當該行中的兩個值與該列中更遠的值匹配時,從該行中選擇“值”

[英]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

我的嘗試不考慮當variableAvariableB在當前行中匹配時的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM