首页 > 解决方案 > 下个月记录 Pandas 中的搜索值

问题描述

鉴于我有这样的df:

    ID                Date Amount
0    a 2014-06-13 12:03:56     13
1    b 2014-06-15 08:11:10     14
2    a 2014-07-02 13:00:01     15
3    b 2014-07-19 16:18:41     22
4    b 2014-08-06 09:39:14     17
5    c 2014-08-22 11:20:56     55
              ...
129  a 2016-11-06 09:39:14     12
130  c 2016-11-22 11:20:56     35
131  b 2016-11-27 09:39:14     42
132  a 2016-12-11 11:20:56     18

我需要创建一个列 df['Checking'] 以显示该 ID 是否会出现在下个月,我尝试了如下代码:

df['Checking']= df.apply(lambda x: check_nextmonth (x.Date, 
                     x.ID), axis=1)

在哪里

def check_nextmonth(date, id)=
  x= id in df['user_id'][df['Date'].dt.to_period('M')== ((date+ 
              relativedelta(months=1))).to_period('M')].values
  return x

但是处理单行需要很长时间。我该如何改进此代码或其他方式来实现我想要的?

标签: python-3.xpandas

解决方案


这是一种方法,检查分组id的下个月是否等于当前月份+1,并通过对ID进行排序来分配相同的值。

check = df.groupby('ID').apply(lambda x : x['Date'].dt.month.shift(-1) == x['Date'].dt.month+1).stack().values

df = df.sort_values('ID').assign( checking = check).sort_index()

  ID                Date  Amount  checking
0  a 2014-06-13 12:03:56      13      True
1  b 2014-06-15 08:11:10      14      True
2  a 2014-07-02 13:00:01      15     False
3  b 2014-07-19 16:18:41      16      True
4  b 2014-08-06 09:39:14      17     False
5  c 2014-08-22 11:20:56      18     False

推荐阅读