Итак, у меня есть один фрейм данных, который имеет несколько столбцов, и я хочу попытаться выяснить, находятся ли значения в моих столбцах «Связано ..» в столбце с именем «Новые имена», и если это так, то конкретное значение ячейки должно быть установлено таким образом » cell.value - Да »или, если не то,« cell.value - Нет »
import pandas as pd
d = {'New Names': ['a,b,c','a','c,d,e,f','a'], 'Linked Letter 0':
['a','b','c','d'],
'Linked Letter 1': ['c','s','v','None'],
'Linked Letter 2': ['None','None','d','s']}
df_new = pd.DataFrame(data=d)
df_new
Index New Names Linked Letter 0 Linked Letter 1 Linked Letter 2
------- ----------- ----------------- ----------------- -----------------
0 a,b,c a c None
1 a b s None
2 c,d,e,f c v d
3 a d None s
Итак, ожидаемый результат должен быть в следующей таблице;
Index New Names Linked Letter 0 Linked Letter 1 Linked Letter 2
------- ----------- ----------------- ----------------- -----------------
0 a,b,c a - YES c - YES None
1 a b - NO s - NO None
2 c,d,e,f c - YES v - NO d - YES
3 a d - NO None s - NO
Одна проблема с решением, приведенным ниже:
Проблема в том, что сопоставление значений YES и NO значениям иногда не работает должным образом. Например, то же значение, которое получает YES в конце, может получить NO в следующей строке, даже если значение в столбце New Names одинаково в обеих строках.
Как вы думаете, почему это могло произойти?






Вы можете использовать pd.DataFrame.filter для фильтрации столбцов Linked, понимание списка для построения логического массива и, наконец, loc с np.where для условной логики:
df = pd.DataFrame(data=d)
for col in df.filter(like='Linked'):
bools = [link in new_names for link, new_names in zip(df[col], df['New Names'])]
df.loc[df[col] != 'None', col] += pd.Series(np.where(bools, ' - YES', ' - NO'))
print(df)
Linked Letter 0 Linked Letter 1 Linked Letter 2 New Names
0 a - YES c - YES None a,b,c
1 b - NO s - NO None a
2 c - YES v - NO d - YES c,d,e,f
3 d - NO None s - NO a
@iSerd, извини, не слежу. Хотите передать отредактируйте свой вопрос данные, которые позволяют нет работать с предложенным мной решением?
Привет @jpp, я только что обновил запись своим вопросом, спасибо за внимание
@iSerd, извините, я имел в виду изменить ваш ввод, дать минимальный воспроизводимый пример, т.е. ввод, где моя логика работает нет. Он работает с введенными вами данными.
На самом деле, если я попытаюсь воссоздать данные самостоятельно, ваше решение будет работать, однако мне нужно обработать данные, прежде чем получить эту версию, указанную в моем вопросе, и я не могу поделиться фактическими данными (конфиденциальными), поэтому я считаю, что это должно быть чем-то связанным с проблемой типа данных или sth (я уже проверил тип данных, где у меня неправильное сопоставление для Да и Нет) - думаете ли вы о какой-либо другой возможной проблеме здесь? потому что это так странно, что иногда это работает, а иногда нет.
@iSerd, возможно. Но это другой вопрос. В качестве ответа на ваш новый вопрос я предлагаю вам задать новый вопрос с минимальный воспроизводимый пример. В противном случае я (или кто-либо другой) просто догадываюсь.
Спасибо! Я так и сделаю. Ваше здоровье
хотя он работает так, как должен, однако в некоторых случаях логический массив заполняет неправильный тег (ДА, НЕТ), и это происходит даже с точно такими же значениями. например, в некоторых строках вы найдете один элемент в столбце «Новые имена» и прикрепите значение «Да», а для того же элемента в другой строке он прикрепит «Нет», даже если значение находится в столбце «Новые имена».