Я хотел бы пройти через столбец «FRUIT» в фрейме данных ниже и вывести логическое значение в другом столбце, называемом «STATUS», на основе порядка значений в столбце «FRUIT». Всякий раз, когда строка «PINE» располагается перед словом «ORANGE» в списке, мне нужно, чтобы значение в столбце STATUS было «TRUE», иначе значение было бы «FALSE».
Я попробовал код ниже, но не получил ожидаемого результата:
datadf = {'ID': ['1000', '1001', '1002', '1003','1004','1005','1006'], 'FRUIT': [["ORANGE","ORANGE"],["ORANGE","PINE"],["PINE","ORANGE"],["PINE","PINE","ORANGE"],["ORANGE","PINE","ORANGE"],["ORANGE","PINE"],["ORANGE","ORANGE","PINE"]]}
def FRUIT_STATUS(datadf):
counter=0
for i in range(len(datadf['FRUIT'])):
if ("PINE" in datadf['FRUIT'] ):
return "TRUE"
else:
return "FALSE"
datadf['STATUS'] = datadf.apply(FRUIT_STATUS, axis = 1)
Окончательный фрейм данных должен выглядеть так:
Одной из возможностей было бы использование регулярных выражений. Обратите внимание, что это также вернет True, если что-то еще находится между PINE и ORANGE. В зависимости от того, что именно вы хотите, вы можете настроить регулярное выражение.
import pandas as pd
datadf = {'ID': ['1000', '1001', '1002', '1003','1004','1005','1006'], 'FRUIT': [["ORANGE","ORANGE"],["ORANGE","PINE"],["PINE","ORANGE"],["PINE","PINE","ORANGE"],["ORANGE","PINE","ORANGE"],["ORANGE","PINE"],["ORANGE","ORANGE","PINE"]]}
df = pd.DataFrame(datadf)
df['STATUS'] = df.FRUIT.astype(str).str.contains(r'PINE.*ORANGE')