Как сравнить две строки и получить результат с помощью индекса в Pyhton? - PullRequest
2 голосов
/ 05 апреля 2020

У меня есть датафрейм

  Day Value
1  Mon   0
2  Mon   1
3  Fri   1
4  Mon   1
5  Mon   1
6  Mon   1
7  Mon   0
8  Tue   1
9  Tue   1

И я хочу найти строку, имеющую два последовательных 1 столбца «Группировка по дню».

Ожидаемый результат:

  Day  Value
5 Mon   1
6 Mon   1
9 Tue   1

Ответы [ 2 ]

3 голосов
/ 05 апреля 2020

Используйте boolean indexing для фильтрации:

m = df['Value'].eq(1)
s = df['Day'].ne(df['Day'].shift()).cumsum()
df = df[s[m].duplicated() & m]
print (df)
   Day  Value
5  Mon      1
6  Mon      1
9  Tue      1

Подробности :

Первое создание последовательной серии с Series.shift и Series.ne и Series.cumsum:

print (df['Day'].ne(df['Day'].shift()).cumsum())
1    1
2    1
3    2
4    3
5    3
6    3
7    3
8    4
9    4
Name: Day, dtype: int32

, а затем фильтрация по 1 значениям в Value:

print (s[m])
2    1
3    2
4    3
5    3
6    3
8    4
9    4
Name: Day, dtype: int32

И получить Series.duplicated для всех дубликатов помощника Series с именем s:

print (s[m].duplicated())
2    False
3    False
4    False
5     True
6     True
8    False
9     True
Name: Day, dtype: bool

Последняя цепочка с побитовым И * & для маски с таким же размер как оригинал:

print (s[m].duplicated() & m)
1    False
2    False
3    False
4    False
5     True
6     True
7    False
8    False
9     True
dtype: bool
0 голосов
/ 05 апреля 2020

Я не знаком с pandas как структурой данных, поэтому я не могу предоставить рабочий код, но это мой подход к этой проблеме:

previous_value = 0
all_correct_rows = []
for i in data_row:
   if current_value == 1 and previous_value == 1:
      all_correct_rows.append(current_row)
   previous_value = current_value

Где previous_value и current_value - значения в столбце дня.

...