我有以下代码:
import random
import pandas as pd
from datetime import datetime
inicio = datetime(2017, 1, 30)
final = datetime(2019, 3, 21)
datos = []
for i in range (0, 10000):
datos.append(inicio + (final - inicio) * random.random())
df = pd.DataFrame(datos)
df.rename(columns={0: "Fecha"}, inplace=True)
procesos = []
for a in range (1, 11):
procesos.append('Proceso' + str(a))
total = 0
proceso = []
for i in range (0, 10):
for j in range ( 0, 1000):
proceso.append(procesos[total])
total += 1
datosProceso = pd.DataFrame(proceso)
datosProceso.rename(index=str, columns={0: "Proceso"}, inplace=True)
这将创建两个具有 10,000 个随机数据的 df,一个具有 10,000 个日期,另一个具有 10,000 个过程数据,分为 10 个随机过程,即 1000 个过程数据1、1000 个过程数据2 等。
现在我怎么能将这两个数据框合并为一个有两列、进程和日期的数据框,我尝试使用 concat 添加 id,但它会抛出它,join 给我一个错误,等等。
在不使用快速组装的两个 DF 的情况下,我这样做但需要 2 到 3 分钟,因为它在位置上逐行移动,除了 SettingWithCopyWarning 抛出的事实之外,还取代了值:
import random
import pandas as pd
from datetime import datetime
inicio = datetime(2017, 1, 30)
final = datetime(2019, 3, 21)
datos = []
for i in range (0, 10000):
datos.append(inicio + (final - inicio) * random.random())
df = pd.DataFrame(datos)
df.rename(columns={0: "Fecha"}, inplace=True)
df['proceso'] = ''
procesos = []
for a in range (1, 11):
procesos.append('Proceso' + str(a))
total = 0
posicion = 0
for i in range (0, 10):
for j in range ( 0, 1000):
df['proceso'][posicion] = procesos[total]
print(posicion)
posicion += 1
total += 1
复杂的是两者的索引,
dataframes
因为选项不同,merge
在这些情况下它们不能像我们希望的那样工作。可以做的是将两者的索引初始化data.frame
为一个简单的序号,我们可以用reset_index()
从概念上讲,通过这种方式,两者
dataframes
最终拥有相同的 index(1:9999)
,所以现在它merge()
完成了我们的预期:顺序连接两者dataframes
。