Python 按顺序合并/复制两个数据集
我正在尝试使用pandas合并两个数据集。一个是位置(经度和纬度),另一个是时间范围(0到24小时,15分钟步长=96个数据点) 以下是示例代码: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):
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)