Запрос с перекрестными ссылками на фрейм данных pandas

У меня есть фрейм данных, содержащий столбец идентификатора, связанный столбец идентификатора и столбец значений. Связанный идентификатор является «необязательным» и относится к другой строке в том же фрейме данных (где -1 означает отсутствие ссылки). Я хочу выбрать строки с действующей ссылкой, где value равен value в строке, заданной связанным идентификатором:

import pandas as pd

df = pd.DataFrame({"id": [0,1,2,3,4,5], "linkid": [-1,3,-1,0,5,-1], "value": [10, 20, 30, 20, 40, 50]})
print(df)

# should match row 1 (only): id 1 has value 20 and linkid 3 also has value 20  
# should not match 
matched = df.loc[df.value == df.loc[df.id == df.linkid].value]
# ValueError: Can only compare identically-labeled Series objects

Моя попытка выше приводит к ошибке. Я подозреваю, что моя попытка довольно далека от цели, но не знаю, как действовать дальше. Я хочу избежать циклов по соображениям производительности. Любая помощь с благодарностью получена

Я думал, что это достаточно ясно, но, согласно комментарию в коде, мой требуемый результат в этом примере - строка 1 из исходного фрейма данных:

id  linkid  value
 1       3   20.0

вам нужно выбрать только строки, где 'id' == 'linkid'? или вам нужно какое-то слияние? вы можете показать, какой результат вам нужен?

Rudolf Morkovskyi 31.10.2018 12:15
1
1
244
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Создайте еще один столбец value_link для столбца linkid, который является value из id == linkid. Следующее:

import pandas as pd
import numpy as np

df = pd.DataFrame({"id": [0,1,2,3,4,5], "linkid": [-1,3,-1,0,5,-1], "value": [10, 20, 30, 20, 40, 50]})
df['value_link'] = df.linkid.apply(lambda x: df[df['id'] == x].value.values[0] if x != -1 else np.nan)

matched = df[df.value == df.value_link]
Ответ принят как подходящий

Думаю, вы можете попробовать это:

new_df = df.merge(df[['id','value']].rename(columns={'id':'linkid'}),how='left',on="linkid")
new_df[new_df.value_x == new_df.value_y]

Другие вопросы по теме