Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在布尔索引后删除列中的某些值?_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 如何在布尔索引后删除列中的某些值?

Python 如何在布尔索引后删除列中的某些值?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个df,如下所示: dates values 2020-03-29 00:30:00 86.824 2020-03-29 00:45:00 86.923 2020-03-29 01:00:00 87.222 2020-03-29 01:15:00 87.52 2020-03-29 01:30:00 87.918 2020-03-29 01:45:00 88.415 2020-03-29 02:00:00 89.012 2020-03-29 02:15:00 89.807 2020-03

我有一个
df
,如下所示:

dates   values
2020-03-29 00:30:00 86.824
2020-03-29 00:45:00 86.923
2020-03-29 01:00:00 87.222
2020-03-29 01:15:00 87.52
2020-03-29 01:30:00 87.918
2020-03-29 01:45:00 88.415
2020-03-29 02:00:00 89.012
2020-03-29 02:15:00 89.807
2020-03-29 02:30:00 90.504
2020-03-29 02:45:00 90.702
2020-03-29 03:00:00 90.205
2020-03-29 03:15:00 88.713
2020-03-29 03:30:00 86.724
2020-03-29 03:45:00 84.636
2020-03-29 04:00:00 83.044
2020-03-29 04:15:00 82.249
我正在考虑夏令时,为此,我必须只删除
日期
列中的日期,并且不应删除
列中的值

由于每年的夏令时是在3月的最后一个星期日,我做了以下操作以获得3月最后一个星期日的日期:

import datetime
currentYear = datetime.datetime.now().strftime("%Y")
march_last_day = currentYear + '-03-31'
march_last_day = datetime.datetime.strptime(march_last_day, '%Y-%m-%d')

ZEIT_UMSTELLUNG_START = march_last_day - \
    datetime.timedelta((march_last_day.weekday() + 1) % 7)
ZEIT_UMSTELLUNG_START = ZEIT_UMSTELLUNG_START.replace(hour=2, minute=00)
ZEIT_UMSTELLUNG_START_2 = ZEIT_UMSTELLUNG_START + datetime.timedelta(hours=1)
价值观:

ZEIT_UMSTELLUNG_START.replace(hour=2, minute=00)
Out[13]: datetime.datetime(2020, 3, 29, 2, 0)
ZEIT_UMSTELLUNG_START + datetime.timedelta(hours=1)
Out[14]: datetime.datetime(2020, 3, 29, 3, 0)
现在我想从
日期
列中删除
日期
介于
开始日期
(包括)和
开始日期
(不包括)之间的日期,下一个值应该向上“移位”,但
列中的值不应该受到干扰

我做到了:

mask = (df['dates'] >= ZEIT_UMSTELLUNG_START) & (df['dates'] < ZEIT_UMSTELLUNG_START_2)
df = df.loc[mask]
如果将我的所需输出与原始的
df
进行比较,您可以看到
02:00:00
03:00:00
之间的时间戳已被删除,其他列刚刚被推或上移。移位后,
dates
列最后4行中的
NaN
可以放置

尝试

df.loc[mask, 'dates'] = pd.NaT
df['dates'] = df['dates'].sort_values(ascending=True).tolist()

嘿,解决方案部分有效。
values
列中的值也受到影响。。我不想让他们动。只有
dates
列中的日期必须上移,最后必须放置4个
NaTs
NaNs
。您可以在我发布的所需输出中看到,
values
列中的值未生效。您确定吗?值不是与日期对应的吗?只移动dates列将打乱日期-值关系。是的,我确信。
df['dates']=df['dates']。排序值(升序=真)。值
这对我很有效。
df.loc[mask, 'dates'] = pd.NaT
df['dates'] = df['dates'].sort_values(ascending=True).tolist()