gpt4 book ai didi

python - 选择列值在给定范围之间的行

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:37 24 4
gpt4 key购买 nike

如何从 DataFrame 中查找和删除值在特定范围内的行,例如日期大于“2017-03-02”且小于“2017-03-05”

import pandas as pd                                     

d_index = pd.date_range('2018-01-01', '2018-01-06')
d_values = pd.date_range('2017-03-01', '2017-03-06')

s = pd.Series(d_values)
s = s.rename('values')

df = pd.DataFrame(s)
df = df.set_index(d_index)

# remove rows with specific values in 'value' column

在上面的示例中,我将 d_values 从最早日期排序到最晚日期,因此在这种情况下,按索引对数据帧进行切片可以完成这项工作。但我正在寻找在 d_values 包含未排序的随机日期值时也能工作的解决方案。有没有办法在 Pandas 中做到这一点?

最佳答案

选项 1
pd.Series.between 似乎适合这项任务。

df[~df['values'].between('2017-03-02', '2017-03-05', inclusive=False)]

values
2018-01-01 2017-03-01
2018-01-02 2017-03-02
2018-01-05 2017-03-05
2018-01-06 2017-03-06

详情
between 标识范围的所有项 -

m = df['values'].between('2017-03-02', '2017-03-05', inclusive=False)
m

2018-01-01 False
2018-01-02 False
2018-01-03 True
2018-01-04 True
2018-01-05 False
2018-01-06 False
Freq: D, Name: values, dtype: bool

使用掩码过滤df -

df = df[~m]

选项 2
或者,使用良好的旧逻辑或 -

df[~(df['values'].gt('2017-03-02') & df['values'].lt('2017-03-05'))]

values
2018-01-01 2017-03-01
2018-01-02 2017-03-02
2018-01-05 2017-03-05
2018-01-06 2017-03-06

请注意,这两个选项都适用于日期时间对象以及字符串日期列(在这种情况下,比较是字典顺序的)。

关于python - 选择列值在给定范围之间的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48366561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com