如何解决根据条件删除元组元素
具有DST值的数据框:
data0 = pd.DataFrame({'DST':[33,11,-52,7,80,34,41,68,-87],'Date':['1975-01-03','1975-01-04','1975-01-07','1975-01-08','1975-01-13','1975-01-14','1975-01-15','1975-02-01','1975-02-03']})
data0
DST Date
0 33 1975-01-03
1 11 1975-01-04
2 -52 1975-01-07
3 7 1975-01-08
4 80 1975-01-13
5 34 1975-01-14
6 41 1975-01-15
7 68 1975-02-01
8 -87 1975-02-03
我有故事集
combined_date = [('1975-01-03','1975-01-06'),('1975-01-13','1975-01-15'),('1975-01-31','1975-02-02'),('1975-02-03','1975-02-13')]
问题: 如果DST在元组中的那些日期之间低于-50,则必须删除元组元素。 我尝试了代码:
for i in len(data0):
if data0['DST'][i]<-50:
del (j for j in combined_date if data0['DATE'][i]>=j[0] and data0['DATE'][i]<=j[1])
预期输出:
('1975-01-03','1975-02-02')
发生错误:无法删除生成器表达式。
注意
如果DST低于-50,则必须删除该元组!
解决方法
首先按boolean indexing
中的条件过滤行:
data0['Date'] = pd.to_datetime(data0['Date'])
df = data0[data0['DST']<-50]
print (df)
DST Date
3 -67 1975-01-07
4 -80 1975-01-15
然后使用Series.between
和Series.any
删除列表理解中的元组值:
out = [j for j in combined_date if not df['Date'].between(j[0],j[1]).any()]
print (out)
,
从解析器的角度查看代码:
del (j for j in combined_date if ...)
括号括起一个生成器。删除生成器表达式是什么意思?
您想要要做的是删除列表中的元素。在大多数应用程序中,最有效的方法是翻转逻辑并保持所需的元素。而不是删除...
kept_date = [j for j in combined_date if ...]
你能从那里拿走吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。