使用链式法则根据列值对 pandas 数据框进行子集化
Subset a pandas dataframe based on column value using chain rule
假设我有以下代码
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 个计算?
任何指针都会很有帮助
让我们像这样使用 assign
和 query
:
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
您可以尝试pipe
应用需要数据帧的可链接函数。
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
假设我有以下代码
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 个计算?
任何指针都会很有帮助
让我们像这样使用 assign
和 query
:
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
您可以尝试pipe
应用需要数据帧的可链接函数。
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