如果日期介于两个日期之间,则Python将在列中求和一个常量值
让我们假设一个使用datetimes作为索引的数据帧,其中有一个名为“Score”的列,初始值设置为10:如果日期介于两个日期之间,则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次之间)时: 由于我的实际数
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)