通过pandas

时间:2017-06-12 23:34:34

标签: 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):
    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
...

我如何获得这样的数据?

1 个答案:

答案 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可能有内置的方法来执行此操作,但据我所知,joinmerge只能通过填充常量来弥补行数的差异({默认情况下为{1}}。

结果:

NaN