使用链式规则基于列值对pandas数据框架进行子集



比如下面的代码

import pandas as pd
dat = pd.DataFrame({'A' : ['2010-01-01', '2011-01-01', '2012-01-01', '2013-01-01'], 'B' : [1,2,3,4]})

start = pd.to_datetime('2011Q1').to_period('Q').start_time
end = pd.to_datetime('2012Q1').to_period('Q').start_time
dat['A1'] = pd.to_datetime(dat['A'])
dat1 = dat[dat['A1'].between(start, end)]

您可以看到,在最后第二行中,我创建了一个类型为date的新列A1,在最后一行中,我基于新创建的列

进行了子集设置。我正在寻找某种方式,我如何使用chain rule使用单行代码执行以上2个计算?

任何指针都会很有帮助

您可以尝试pipe应用期望dataframe的链函数

out = dat.assign(A1=pd.to_datetime(dat['A'])).pipe(lambda df: df[df['A1'].between(start, end)])
print(out)
            A  B         A1
1  2011-01-01  2 2011-01-01
2  2012-01-01  3 2012-01-01

我们这样使用assignquery:

dat.assign(A1=pd.to_datetime(dat['A'])).query('@start <= A1 <= @end')

输出:

            A  B         A1
1  2011-01-01  2 2011-01-01
2  2012-01-01  3 2012-01-01

相关内容

  • 没有找到相关文章

最新更新