Python 按顺序合并/复制两个数据集

Python 按顺序合并/复制两个数据集,python,pandas,merge,Python,Pandas,Merge,我正在尝试使用pandas合并两个数据集。一个是位置(经度和纬度),另一个是时间范围(0到24小时,15分钟步长=96个数据点) 以下是示例代码: s1 = pd.Series([1, 2, 3]) s2 = pd.Series([4, 5, 6]) df = pd.DataFrame([list(s1), list(s2)], columns = ["A", "B", "C"]) timeframe_array=[] for i in range(0, 3600, timeframe):

我正在尝试使用pandas合并两个数据集。一个是位置(经度和纬度),另一个是时间范围(0到24小时,15分钟步长=96个数据点)

以下是示例代码:

s1 = pd.Series([1, 2, 3])
s2 = pd.Series([4, 5, 6])
df = pd.DataFrame([list(s1), list(s2)],  columns =  ["A", "B", "C"])

timeframe_array=[]
for i in range(0, 3600, timeframe):
    timeframe_array.append(i)
我想得到如下数据:

   A  B  C  time
0  1  2  3     0
1  1  2  3    15
2  1  2  3    30
3  1  2  3    45
...

如何获得这样的数据?

虽然不是特别优雅,但应该可以:

from __future__ import division  # only needed if you're using Python 2
import pandas as pd
from math import ceil

# Constants
timeframe = 15
total_t = 3600
创建
df1

s1 = [1, 2, 3]
s2 = [4, 5, 6]
df1 = pd.DataFrame([s1, s2], columns=['A', 'B', 'C'])
接下来,我们要构建
df2
,以便为
df1
中的每一行复制序列
0-3600
(步骤=15)。我们可以使用
df1.shape[0]
提取行数(在本例中为
2

接下来,您需要复制
df1
中的行以匹配
df2

factor = ceil(df2.shape[0] / df1.shape[0])
df1_f = pd.concat([df1] * factor).sort_index().reset_index(drop=True)
最后,将两个数据帧连接在一起并修剪掉多余的行

df3 = df1_f.join(df2, how='left')[:df2.shape[0]]
Pandas
可能有一种内置的方法来实现这一点,但据我所知,
join
merge
只能通过填充常量(默认情况下,
NaN
)来弥补行间的差异


结果:

>>> print(df3.head(4))

   A  B  C  time
0  1  2  3     0
1  1  2  3    15
2  1  2  3    30
3  1  2  3    45

>>> print(df3.tail(4))

     A  B  C  time
476  4  5  6  7140
477  4  5  6  7155
478  4  5  6  7170
479  4  5  6  7185

>>> df3.shape  # (480, 4)

“合并”是指左联合吗?如果是这样:
df1.join(df2,how='left')
。谢谢,但是应该重复时间变量(0、15、30…)。很抱歉,我编辑了原始问题(因为它很难理解)。我仍然不确定你在找什么。是否要为
df
中的每一行复制时间0-3600(步长=15)?也就是说,最终数据帧的行总数为
240*2
=
480
是的,您是正确的。数据点的总数应为480
>>> print(df3.head(4))

   A  B  C  time
0  1  2  3     0
1  1  2  3    15
2  1  2  3    30
3  1  2  3    45

>>> print(df3.tail(4))

     A  B  C  time
476  4  5  6  7140
477  4  5  6  7155
478  4  5  6  7170
479  4  5  6  7185

>>> df3.shape  # (480, 4)