Узнайте, существует ли значение в предыдущих 2 строках - PullRequest
0 голосов
/ 09 июля 2019

У меня есть df, который я хотел бы найти в этом значении, дублируется в предыдущих 2 строках, среди каждого выбранного столбца.Как мне это сделать?

В Excel я могу сделать это с помощью = if (countif (A1: B2, C1), "True", "False")

c = {'N1': [1,1,2,3,4,4,5],'N2': [2,3,4,4,5,6,7],'N3':[3,7,5,5,6,7,8],}
df = pd.DataFrame(c, columns=['N1','N2','N3'])

ОжидаетсяРезультат:

c = {'N1': [1,1,2,3,4,4,5],'N2': [2,3,4,4,5,6,7],'N3':[3,7,5,5,6,7,8],
     "Result1":['NA','NA','True','True','True','True','True'],
     "Result2":['NA','NA','False','True','True','True','True'],
     "Result3":['NA','NA','False','True','False','False','False']}
df = pd.DataFrame(c, columns=['N1','N2','N3','Result1','Result2','Result3'])

Ожидаемый результат, как указано выше.

1 Ответ

1 голос
/ 09 июля 2019

Создайте еще один DataFrame, который имеет 2 смены, затем проверьте, найдено ли значение каждого столбца в любом из этих 6 значений.

u = pd.concat([df.shift(x) for x in range(1, 3)], axis=1, ignore_index=True)

for i in range(df.shape[1]):
    df[f'Result{i+1}'] = u.eq(df.iloc[:, i], axis=0).any(1)

cols = [x for x in df.columns if 'Result' in x]
df.loc[s.isnull().any(1), cols] = 'NA'

   N1  N2  N3 Result1 Result2 Result3
0   1   2   3      NA      NA      NA
1   1   3   7      NA      NA      NA
2   2   4   5    True   False   False
3   3   4   5    True    True    True
4   4   5   6    True    True   False
5   4   6   7    True    True   False
6   5   7   8    True    True   False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...