Панды, как проверить различия между значениями столбцов в пределах диапазона или не в каждой группе - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть следующие df,

cluster_id    date
1             2018-01-02
1             2018-02-01
1             2018-03-30
2             2018-04-01
2             2018-04-23
2             2018-05-18
3             2018-06-01
3             2018-07-30
3             2018-09-30

Мне нравится создавать логический столбец recur_pmt, для которого установлено значение True, если все различия между последовательными значениями date в каждом кластере (df.groupby('cluster_id')) равны 30 < x < 40; и False в противном случае. Таким образом, результат, как,

cluster_id    date          recur_pmt
1             2018-01-02    False
1             2018-02-01    False
1             2018-03-30    False
2             2018-04-01    True
2             2018-04-23    True
2             2018-05-18    True
3             2018-06-01    False
3             2018-07-30    False
3             2018-09-30    False

Я пытался

df['recur_pmt'] = df.groupby('cluster_id')['date'].apply(
            lambda x: (20 < x.diff().dropna().dt.days < 40).all())

но это не сработало. Мне также интересно, может ли он использовать transform в этом случае.

1 Ответ

0 голосов
/ 04 сентября 2018

Используйте transform с Series.between и параметром inclusive=False:

df['recur_pmt'] = df.groupby('cluster_id')['date'].transform(
            lambda x: (x.diff().dropna().dt.days.between(20, 40, inclusive=False)).all())
print (df)
   cluster_id       date  recur_pmt
0           1 2018-01-02      False
1           1 2018-02-01      False
2           1 2018-03-30      False
3           2 2018-04-01       True
4           2 2018-04-23       True
5           2 2018-05-18       True
6           3 2018-06-01      False
7           3 2018-07-30      False
8           3 2018-09-30      False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...