所以我有一个2列数据框var sheet = document.createElement('style'),
$rangeInput = $('.range'),
prefs = ['webkit-slider-runnable-track', 'moz-range-track', 'ms-track'];
document.body.appendChild(sheet);
var getTrackStyle = function (el) {
var curVal = el.value,
style = '';
for (var i = 0; i < prefs.length; i++) {
style += '.range::-' + prefs[i] + '{background: linear-gradient(to right, #34495e 0%, #34495e ' + curVal*20 + '%, #fff ' + curVal + '%, #fff 100%)}';
}
return style;
}
$rangeInput.on('input', function () {
sheet.textContent = getTrackStyle(this);
});
和datetime
,我想删除所有不属于至少一个日期范围的行。
E.g。假设我的有效日期范围表示为元组
value
我有一个数据框
valid_date_ranges = [
(2017-01-01 00:00:00.00, 2017-01-03 15:00:00.00),
(2017-01-04 03:25:00.00, 2017-01-06 22:56:00.00),
...
]
我想删除最后带星号的行,因为它们不属于任何日期范围。
答案 0 :(得分:0)
这是一种方法:
# sample df and ranges to exclude, per OP
datetime value
"2017-01-01 00:00:00.00" 1234
"2017-01-01 00:01:00.00" 13241526
"2017-01-01 10:02:00.00" 356356
"2017-01-01 10:03:00.00" 17435
"2017-01-01 10:04:00.00" 5234515
"2017-01-01 10:05:00.00" 52452435
"2017-01-03 14:59:00.00" 156256
"2017-01-03 15:00:00.00" 665654
"2017-01-03 15:01:00.00" 890656
"2017-01-03 15:02:00.00" 698765
"2017-01-03 15:03:00.00" 6574
"2017-01-04 03:23:00.00" 6541632
"2017-01-04 03:24:00.00" 1234
"2017-01-04 03:25:00.00" 4657347
"2017-01-04 03:26:00.00" 765
"2017-01-04 03:27:00.00" 870089
df = pd.read_clipboard(parse_dates=True, index_col='datetime')
valid_date_ranges = [("2017-01-01 00:00:00.00", "2017-01-03 15:00:00.00"),
("2017-01-04 03:25:00.00", "2017-01-06 22:56:00.00")]
dranges = [pd.date_range(start, end, freq='min') for start, end in valid_date_ranges]
现在删除在日期范围内找不到的行,并在新的filtered
数据框中构建剩余的行:
filtered = pd.DataFrame()
for drange in dranges:
filtered = pd.concat([filtered,df.drop(df.index[~df.index.isin(drange)])])
print(filtered)
value
datetime
2017-01-01 00:00:00 1234
2017-01-01 00:01:00 13241526
2017-01-01 10:02:00 356356
2017-01-01 10:03:00 17435
2017-01-01 10:04:00 5234515
2017-01-01 10:05:00 52452435
2017-01-03 14:59:00 156256
2017-01-03 15:00:00 665654
2017-01-04 03:25:00 4657347
2017-01-04 03:26:00 765
2017-01-04 03:27:00 870089
答案 1 :(得分:-1)
这是另一种方法。
valid_date_ranges = [('2017-01-01 00:00:00.00', '2017-01-03 15:00:00.00'),
('2017-01-04 03:25:00.00', '2017-01-06 22:56:00.00'),
]
df=pd.DataFrame({'datetime':
[
'2017-01-01 00:00:00.00',
'2017-01-03 00:01:00.00',
'2017-01-03 15:00:00.00',
'2017-01-04 01:03:00.00',
'2017-01-04 02:03:00.00',
'2017-01-04 03:25:00.00',
'2017-01-06 22:56:00.00',
'2017-01-06 23:56:00.00',
],
'value':[1234,1324,1526,
356356,
17435,5234,515,52452435]})
df=df.sort_values('datetime').set_index('datetime')
for i,idx in enumerate(df.index):
for r in valid_date_ranges:
if r[0]==idx:
star=True
break
elif r[1]==df.index[i-1]:
star=False
break
else:
star=True
if star:
df.loc[idx,'star']='*'
输出:
value star
datetime
2017-01-01 00:00:00.00 1234 *
2017-01-03 00:01:00.00 1324 *
2017-01-03 15:00:00.00 1526 *
2017-01-04 01:03:00.00 356356 NaN
2017-01-04 02:03:00.00 17435 *
2017-01-04 03:25:00.00 5234 *
2017-01-06 22:56:00.00 515 *
2017-01-06 23:56:00.00 52452435 NaN
df=df.loc[df.loc[:,'star']!="*",:]
输出:
value star
datetime
2017-01-04 01:03:00.00 356356 NaN
2017-01-06 23:56:00.00 52452435 NaN