Python Pandas - проверить, находится ли значение в верхних n строках - PullRequest
0 голосов
/ 26 августа 2018

У нас есть этот код:

import pandas as pd
table = {"Col 1":{"0":"Row 1","1":"Row 2","2":"Row 3","3":"Row 4","4":"Row 5","5":"Row 6","6":"Row 7","7":"Row 8","8":"Row 9","9":"Row 10"},"Col 2":{"0":0,"1":1,"2":0,"3":0,"4":1,"5":0,"6":0,"7":1,"8":1,"9":1}}
tabledf = pd.DataFrame(table)
tabledf["Col 3"] = "??"

, который возвращает это:

    Col 1  Col 2 Col 3
0   Row 1      0    ??
1   Row 2      1    ??
2   Row 3      0    ??
3   Row 4      0    ??
4   Row 5      1    ??
5   Row 6      0    ??
6   Row 7      0    ??
7   Row 8      1    ??
8   Row 9      1    ??
9  Row 10      1    ??

В столбце 3 мы хотим показать 1 в верхних / первых 2 строках, которые имеют 1 вCol 2 (и 0 в следующем).Это желаемый результат:

Col 3
0
1
0
0
1
0
0
0
0
0

Как мы это делаем?

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Вашу логику можно разделить на 2 критерия, которые должны удовлетворять обоим:

  1. Col 2 равно 1.
  2. Количество Col 2, равное 1, меньше или равно 2.

Затем вы можете применить это в векторизованном виде, преобразовав в int в качестве последнего шага:

df['Col 3'] = (df['Col 2'].eq(1) & df['Col 2'].eq(1).cumsum().le(3)).astype(int)

print(df)

    Col 1  Col 2  Col 3
0   Row 1      0      0
1   Row 2      1      1
2   Row 3      0      0
3   Row 4      0      0
4   Row 5      1      1
5   Row 6      0      0
6   Row 7      0      0
7   Row 8      1      0
8   Row 9      1      0
9  Row 10      1      0
0 голосов
/ 26 августа 2018
tabledf['Col 3'] = 0

tabledf.loc[tabledf['Col 2'].loc[lambda x: x==1][:2].index, 'Col 3']=1

print(tabledf)
    Col 1  Col 2  Col 3
0   Row 1      0      0
1   Row 2      1      1
2   Row 3      0      0
3   Row 4      0      0
4   Row 5      1      1
5   Row 6      0      0
6   Row 7      0      0
7   Row 8      1      0
8   Row 9      1      0
9  Row 10      1      0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...