雖然不是特別優雅,這應該工作:
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
(步驟= 15)複製的每行在df1
。我們可以提取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
只能由具有恆定(默認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')'。 – lnNoam
謝謝,但時間變量(0,15,30 ...)應該重複。抱歉,我編輯了原始問題(因爲它很難理解)。 –
我仍然不完全確定你在找什麼。你想在'df'中爲每一行復制0-3600(step = 15)的時間嗎?也就是說,最後一個數據幀的總行數是'240 * 2' ='480'? – lnNoam