我有一个看起来像这样的数据框
df:
date Open Quantity Close
2012-01-05 5277.95 50.0 8424.90
2012-01-06 8424.90 50.0 8486.85
2012-01-09 8486.85 50.0 8453.25
2012-01-10 8453.25 50.0 8758.05
2012-01-11 8758.05 50.0 8849.00
2012-01-12 8849.00 50.0 8971.00
2012-01-12 5221.90 -50.0 8971.00
2012-02-24 10718.10 50.0 10604.80
. . . .
,并具有另一个数据框range1
,其中包含每个月的交易开始和截止日期。为了知道这些日期中的哪个不在开始日期和截止日期之内,我实现了此代码
df['trade_range'] = pd.cut(df.Date, range1, right='False', duplicates='drop',labels=False)
并得到这样的结果
Open Quantity Close trade_range
Date
2012-01-05 5277.95 50.0 8424.90 (2011-12-30, 2012-01-25]
2012-01-06 8424.90 50.0 8486.85 (2011-12-30, 2012-01-25]
2012-01-09 8486.85 50.0 8453.25 (2011-12-30, 2012-01-25]
2012-01-10 8453.25 50.0 8758.05 (2011-12-30, 2012-01-25]
2012-01-11 8758.05 50.0 8849.00 (2011-12-30, 2012-01-25]
2012-01-12 8849.00 50.0 8971.00 (2011-12-30, 2012-01-25]
2012-01-12 5221.90 -50.0 8971.00 (2011-12-30, 2012-01-25]
2012-02-24 10718.10 50.0 10604.80 (2012-02-23, 2012-02-24]
如果在df中没有日期的重复输入,那么识别超出截止日期的日期很容易,因为我只需要在df.trade_range中找到唯一的数组即可。但是,我有一个数据框,其中包含日期的两次输入,如您从2012-01-12
所见。有什么办法可以使用pd.date_range转换trade_range列并获取范围的长度。如您所见,截止日期之后的那些日期(2012-02-24
)的范围是一个整数。还是有什么方法可以建议您提高效率?