Фильтрация данных - PullRequest
       5

Фильтрация данных

0 голосов
/ 05 февраля 2020

enter image description here

Как отфильтровать строки в кадре данных На основе значений между 2 столбцами. Пожалуйста, обратитесь к изображению. Мой ожидаемый результат - строки между TRUE в столбце A и TRUE в столбце B. Как показано на рисунке, ожидаемым результатом будут два кадра данных, в которых первый кадр данных df1 должен иметь строки с индексами от 2 до 6, а второй кадр данных df2 должен иметь строки от индекса 10 до 16

Ответы [ 3 ]

2 голосов
/ 05 февраля 2020

Поскольку вам нужны строки между двумя условиями.

df = pd.read_excel("your_excel.xls")
start_index = df[df["A"] == "TRUE"].index[0]
end_index = df[df["B"] == "TRUE"].index[0]
df = df.iloc[start_index : end_index]
1 голос
/ 05 февраля 2020

Настройка

df = pd.DataFrame({'other':range(9),
                   'A':[True ,False, False ,False, False ,True, False, False, False],
                   'B':[False,False,False,True,False,False,False,True,False]})


   other      A      B
0      0   True  False
1      1  False  False
2      2  False  False
3      3  False   True
4      4  False  False
5      5   True  False
6      6  False  False
7      7  False   True
8      8  False  False

Решение

df2 = df[df['A'].cumsum().ge(1)]
m1 = ~df2[['A','B']].any(axis = 1)
m2=(df2['A'].add(df2['B']).cumsum()%2).eq(1)
#m2=(df2['A'].add(df2['B']).cumsum()%2) #It could be enough
df_filtered = df2.loc[m1 & m2]
print(df_filtered)
   other      A      B
1      1  False  False
2      2  False  False
6      6  False  False
0 голосов
/ 05 февраля 2020

Если это pandas фрейм данных, то вам может помочь следующее:

result = df[(df['A']== 'TRUE' ) | (df['B'] == 'TRUE')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...