我正在尝试使用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
...
我如何获得这样的数据?
答案 0 :(得分:0)
虽然不是特别优雅,但这应该有效:
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
,以便为0-3600
中的每一行复制序列df1
(步骤= 15)。我们可以使用df1.shape[0]
(在这种情况下为2
)提取行数。
df2 = pd.DataFrame({'time': range(0, total_t * df1.shape[0], timeframe)})
接下来,您需要复制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
只能通过填充常量来弥补行数的差异({默认情况下为{1}}。
结果:
NaN