Группировка с логическим условием True в одном из столбцов в Pandas - PullRequest
0 голосов
/ 08 июня 2018

Это мой фрейм данных, который я хочу использовать groupby

Value           Boolean1        Boolean2
 5.175603       False           False
 5.415855       False           False
 5.046997       False           False
 4.607749       True            False
 5.140482       False           False
 1.796552       False           False
 0.139924       False           True
 4.157981       False           True
 4.893860       False           False
 5.091573       False           False
 6              True            False
 6.05           False           False

Я хочу использовать groupby со столбцом Boolean1 and Boolean2.groupby продолжается от False до тех пор, пока не найдет True и не проверит оба столбца, а затем снова следующий False to True.Если есть значение True, то оно может игнорировать остаток False (значения, соответствующие ему), или оно может быть там

Я хочу добиться подобного.

Value       Boolean1            Boolean2

Это одна группа

 5.175603       False               False
 5.415855       False               False
 5.046997       False               False
 4.607749       True                False

Это еще одна

5.140482        False               False
 1.796552       False               False
 0.139924       False               True 
4.157981        False               True

И это еще одна

 4.893860       False               False
 5.091573       False               False
 6              True                False

1 Ответ

0 голосов
/ 08 июня 2018

Моя идея заключается в проверке False s в обоих столбцах, по крайней мере, до одного True столбца:

#chain condition together by OR and invert
m = ~(df['Boolean1'] | df['Boolean2'])
#get consecutive groups with AND for filter only Trues 
#(because inverting, it return False in both cols)
s = (m.ne(m.shift()) & m).cumsum()

for i, x in df.groupby(s):
    print (x)

dtype: int32
      Value  Boolean1  Boolean2
0  5.175603     False     False
1  5.415855     False     False
2  5.046997     False     False
3  4.607749      True     False
      Value  Boolean1  Boolean2
4  5.140482     False     False
5  1.796552     False     False
6  0.139924     False      True
7  4.157981     False      True
       Value  Boolean1  Boolean2
8   4.893860     False     False
9   5.091573     False     False
10  6.000000      True     False
    Value  Boolean1  Boolean2
11   6.05     False     False

Detail :

print (m)
0      True
1      True
2      True
3     False
4      True
5      True
6     False
7     False
8      True
9      True
10    False
11     True
dtype: bool

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