pandas столбец groupby и проверьте, соответствует ли группа нескольким условиям - PullRequest
1 голос
/ 14 февраля 2020

У меня есть DataFrame, который выглядит следующим образом:

      X       Y      Date       are_equal
0   50.0    10.0  2018-08-19      False
1    NaN    10.0  2018-08-19      False
2    NaN    50.0  2018-08-19       True
3   10.0     NaN  2018-08-21      False
4    1.0     NaN  2018-08-19      False
5    NaN    10.0  2018-08-22      False
6   10.0     NaN  2018-08-21      False

Столбец are_equal указывает, что значение в Y находится в X на ту же дату (в данном случае 50.0).

Я пытаюсь сгруппировать по дате и выяснить, содержит ли X конкретное c значение (скажем, 1.0) для даты, содержащей are_equal True.

Мой подход заключался в использовании df.iterrows() и получении строки по следующему индексу после выполнения условия df['are_equal'] == True. Однако строки не обязательно упорядочены.

Как сгруппировать по Date и проверить, содержит ли дата True в are_equal и 1.0 в столбце X на ту же дату ?

Вывод, который я пытаюсь получить, - это новый логический столбец, который выглядит следующим образом:

   contains_specific_value
0    False
1    False
2    False
3    False
4    True
5    False
6    False

1 Ответ

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

Давайте сделаем apply, это может добавить больше условий, но медленно. Вы можете проверить другое решение из transform

df['New']=df.groupby('Date').apply(lambda x : (x['X']==1)&x['are_equal'].any()).reset_index(level=0,drop=True)
df
Out[101]: 
      X     Y        Date  are_equal    New
0  50.0  10.0  2018-08-19      False  False
1   NaN  10.0  2018-08-19      False  False
2   NaN  50.0  2018-08-19       True  False
3  10.0   NaN  2018-08-21      False  False
4   1.0   NaN  2018-08-19      False   True
5   NaN  10.0  2018-08-22      False  False
6  10.0   NaN  2018-08-21      False  False

Или transform

df['X'].eq(1)&(df.groupby('Date').X.transform('any'))
Out[102]: 
0    False
1    False
2    False
3    False
4     True
5    False
6    False
Name: X, dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...