我正在尝试根据时间和ID组合一组字符串,我希望从首次出现起每隔5分钟将数据分组。
数据:
const taskList = {
"tasks": [
{
"name": "Task YES",
"finished": false,
"id": 1
},
{
"name": "Task NO",
"finished": false,
"id": 2
}
]
};
let someValue = 'Task NO';
let task = taskList.tasks.find(task => task.name === someValue);
console.log(task);
if (task) console.log(`Task with the ID of ${task.id} already has this name`);
else console.log("No task with that name was found");
所需结果:
ID | Q | Timestamp |
1 | a > b | 24/06/2017 18:11|
1 | b > b | 24/06/2017 18:12|
1 | b > c | 24/06/2017 18:13|
1 | c > d | 24/06/2017 18:14|
1 | c > e | 24/06/2017 18:17|
2 | a > b | 24/06/2017 18:12|
2 | b > c | 24/06/2017 18:15|
我目前正在尝试使用此
:ID | Q | Timestamp |
1 | a > b > b > b > b > c > c > d| 24/06/2017 18:11|
1 | c > e | 24/06/2017 18:17|
2 | a > b > b > c | 24/06/2017 18:12|
但是,这还不够,这打破了时间戳,无法按时间顺序加入。它似乎也只在第一个时间范围内执行。
任何帮助都非常有用。
答案 0 :(得分:0)
您以5个月一次的频率分组:
5M
= 5个月。
5min
或5T
= 5分钟。
查看此time_aliases
如果您将以5T
的频率执行此操作,则将获得分钟数的结果,该结果可以平均除以5(在这种情况下从18:10开始),例如:
ids = [*[1]*5, 2]
q = [f'{i:02}' for i in range(6)]
dates = pd.date_range('2017-06-24 18:11', periods=6, freq='1min')
df = pd.DataFrame({'ids':ids, 'q':q,'dates':dates,})
df
ids q dates
0 1 00 2017-06-24 18:11:00
1 1 01 2017-06-24 18:12:00
2 1 02 2017-06-24 18:13:00
3 1 03 2017-06-24 18:14:00
4 1 04 2017-06-24 18:15:00
5 2 05 2017-06-24 18:16:00
频率为5分钟的分组可以为您
grouped = df.groupby([pd.Grouper(key='dates',freq='5min'), 'ids']).agg(lambda x: '>'.join(set(x)))
grouped
q
dates ids
2017-06-24 18:10:00 1 02>03>01>00
2017-06-24 18:15:00 1 04
2 05
如果您希望18:11
作为开始日期,则可以抵消数据,然后抵消:
df['dates'] -= pd.offsets.Minute(1)
grouped = df.groupby([pd.Grouper(key='dates',freq='5min'), 'ids']).agg(lambda x: '>'.join(set(x))).reset_index()
grouped['dates'] += pd.offsets.Minute(1)
grouped
dates ids q
0 2017-06-24 18:11:00 1 04>00>03>02>01
1 2017-06-24 18:16:00 2 05
从而达到预期的结果。
一个更通用的答案是将最小日期偏移到可以用n
除以最近的分钟数(在您的情况下为n=5
,最小为18:11
)。