如果日期介于两个日期之间,则Python将在列中求和一个常量值

如果日期介于两个日期之间,则Python将在列中求和一个常量值,python,pandas,Python,Pandas,让我们假设一个使用datetimes作为索引的数据帧,其中有一个名为“Score”的列,初始值设置为10: score 2016-01-01 10 2016-01-02 10 2016-01-03 10 2016-01-04 10 2016-01-05 10 2016-01-06 10 2016-01-07 10 2016-01-08 10 我想从分数中减去一个固定值(比如说1),但仅当索引在某些日期之间(例如,在第3次和第6次之间)时: 由于我的实际数

让我们假设一个使用datetimes作为索引的数据帧,其中有一个名为“Score”的列,初始值设置为10:

            score
2016-01-01  10
2016-01-02  10
2016-01-03  10
2016-01-04  10
2016-01-05  10
2016-01-06  10
2016-01-07  10
2016-01-08  10
我想从分数中减去一个固定值(比如说1),但仅当索引在某些日期之间(例如,在第3次和第6次之间)时:

由于我的实际数据帧很大,我将针对不同的日期范围和每个日期范围的不同固定值N执行此操作,因此我希望实现这一点,而无需为每种情况创建一个新的列集-N


类似于numpy的
where
函数,但在一定范围内,如果条件满足,允许我对当前值求和/减,否则什么也不做。是否有类似的情况?

假设日期为日期时间数据类型:

#if date is own column:    
df.loc[df['date'].dt.day.between(3,6), 'score'] = df['score'] - 1

#if date is index:    
df.loc[df.index.day.isin(range(3,7)), 'score'] = df['score'] - 1
使用索引切片:

df.loc['2016-01-03':'2016-01-06', 'score'] -= 1

我将使用查询执行类似的操作:

import pandas as pd

df = pd.DataFrame({"score":pd.np.random.randint(1,10,100)}, 
    index=pd.date_range(start="2018-01-01", periods=100))

start = "2018-01-05"
stop = "2018-04-08"

df.query('@start <= index <= @stop ') - 1  

请看我如何反转比较运算符(使用
~
),以获得我想要的结果。这是有效的,但不是很清楚。当然,你也可以使用
pd.np.where
和all's good in the world.

检查这个答案,并检查@Yuca。问题不是获取范围,而是仅在该范围内编辑数据帧。你所说的没有区别。编辑数据帧需要获取范围,那么问题是什么?
import pandas as pd

df = pd.DataFrame({"score":pd.np.random.randint(1,10,100)}, 
    index=pd.date_range(start="2018-01-01", periods=100))

start = "2018-01-05"
stop = "2018-04-08"

df.query('@start <= index <= @stop ') - 1  
df.where(~df.eval('@start <= index <=  @stop '), 
         df['score'] - 1, axis=0, inplace=True)