使用键重新组合大熊猫中的数据框。比遍历行更快的方法吗?

问题描述 投票:1回答:1

摘要:

我想将表示动作开始和结束的时间序列代码(大型数据集)排列成甘特图,因此我需要将它们重新分组为任务(名称),开始(时间)和完成(时间)列。但是到目前为止,我只能使用for循环在每行上非常缓慢地进行迭代:(

(我一直在尝试groupby和透视,但是我只是对这些还不够了解,无法让它们做我想要的事情。)

我有一个'key'字典/ df,带有一个[[start_code,end_code和一个动作label。简化示例:

import pandas as pd code_key_cols = ["start_code", "end_code", "label"] code_key = [[1, 2, "a"], [3, 4, "b"], [5, 6, "c"], [7, 8, "d"]] code_df = pd.DataFrame(code_key, columns=code_key_cols) Out[]: start_code end_code label 0 1 2 a 1 3 4 b 2 5 6 c 3 7 8 d
数据

然后我有一堆数据,这些数据只是这些代码的时间序列。我想以一种绘制甘特图的方式来组织它们。对于plotly,这意味着具有

task

startfinish列。 ((

[仅创建伪造数据

例如,模仿实际数据的行为,其中相同的操作类型不能并行发生两次,而只能并行发生)]from random import shuffle data = [] for i in range(3000): start_codes = [x for x in code_df.iloc[:, 0]] end_codes = [x for x in code_df.iloc[:, 1]] shuffle(start_codes) shuffle(end_codes) [data.append(x) for x in start_codes] [data.append(x) for x in end_codes] data_cols = ["code", "time"] data_df = pd.DataFrame() data_df['code'] = data data_df['time'] = pd.date_range(start="19700101", periods=len(data)) print(data_df.head()) code time 0 3 1970-01-01 1 1 1970-01-02 2 7 1970-01-03 3 5 1970-01-04 4 2 1970-01-05
我的尝试:

我可以做到,但只能以非常缓慢的方式,逐行迭代!我敢肯定,熊猫有一种更有效的方法。你会怎么做?这是我的方法,但是使用df的12K行需要13s:(

import numpy as np lst = [] for _, code_row in code_df.iterrows(): begin = True task = np.nan start = np.nan finish = np.nan for _, data_row in data_df.iterrows(): if begin: if code_row['start_code'] == data_row['code']: task = code_row.label start = data_row.time begin = False else: if code_row['end_code'] == data_row['code']: finish = data_row.time begin = True lst.append([task, start, finish]) df3 = pd.DataFrame(data=lst, columns=["Task", 'Start', 'Finish'])

输出

对于上下文,我将显示目标,并使用以下代码绘制甘特图(为简化起见,<

import plotly.figure_factory as ff import plotly.io as pio pio.renderers.default = "browser" fig = ff.create_gantt(df3, group_tasks=True) fig.show()

Gantt chart example with 10 iterations顺便说一句,如果你读了这么远,非常感谢你的时间! :)
摘要:我想将表示操作开始和结束的时间序列代码(大型数据集)排列成甘特图,因此我需要将它们重新分组为任务(名称),开始(时间),和...
python python-3.x pandas pandas-groupby
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.