Я хочу создать двоичный столбец, который помечает «да», если ровно один столбец в кадре данных соответствует логическому условию A, а другой столбец в кадре данных соответствует либо логическому условию A, либо логическому условию B. Таким образом, новый столбец будет иметь только 1, если две отдельные колонки удовлетворяют вышеуказанным условиям.
Каждый столбец представляет собой отдельное количество продуктов для каждого года.
Условие A: если продукт (то есть "c1") продал 8 продуктов в текущем году, между 1 и 6 в предыдущем году и между 1 и 6 годом ранее до этого (2 года назад), условие А выполнено.
Условие B: если какой-либо другой продукт (то есть не «c1», скажем, «c3») соответствует условию A выше ИЛИ продан 8 в текущем году и 8 в предыдущем году и 8 два года назад, условие B выполнено.
Таким образом, успех может быть только 1, если ровно 2 любых столбца в конкретном году отвечают вышеуказанным условиям. Один столбец должен соответствовать условию A, а другой столбец - условию B.
import numpy as np
import pandas as pd
df = pd.DataFrame({'C1':[7,3,2,8,3,4,6,8,3,2],'C2':[2,5,4,8,8,8,3,2,8,4],'C3': [7,5,4,6,7,8,6,8,1,7],
'C4':[3,4,4,6,4,2,6,3,2,6],'C5':[6,4,0,8,4,2,6,6,7,8],'Year':[2010,2011,2012,2013,2014,2015,2016,2017,2018,2019]})
df.set_index('Year', inplace=True)
df1 =df[::-1]
df1
_1_CorrA =((df1.eq(8)) & (df1.shift(-1).isin([1,6])) & (df1.shift(-2).isin([1,6]))).sum(axis=1)==1
_1_CorrB =(((df1.eq(8)) & (df1.shift(-1).eq(8)) & (df1.shift(-2).eq(8))) |
((df1.eq(8)) & (df1.shift(-1).isin([1,6])) & (df1.shift(-2).isin([1,6])))).sum(axis=1)==1
Strategy = (((_1_CorrA) & (_1_CorrB)))
df1['Success']=np.where(Strategy,1,0)
Я ожидаю увидеть 1 в строке индекса 2015 и 2013 годов, потому что это единственные две строки, в которых ровно два разных столбца соответствуют указанным выше условиям.