我想初始化一个pandas
DataFrame,这样我就可以用多个时间序列填充它。
import pandas as pd
import numpy as np
from string import ascii_uppercase
dt_rng = pd.date_range(start = pd.tseries.tools.to_datetime('2012-12-31'),
end = pd.tseries.tools.to_datetime('2014-12-28'),
freq = 'D')
df = pd.DataFrame(index = xrange(len(dt_rng) * 10),
columns = ['product', 'dt', 'unit_sales'])
df.product = sorted(np.tile([chr for chr in ascii_uppercase[:10]], len(dt_rng)))
df.dt = np.tile(dt_rng, 10)
df.unit_sales = np.random.random_integers(0, 25, len(dt_rng) * 10)
然而,当我检查df.dt
的前几个值时,我看到字段中的所有值都已经排序了,例如:df.dt[:10]
产2012-12-31
的十倍。我想让这个输出是2012-12-31
, 2013-01-01
,…, 2013-01-08
, 2013-01-09
(前十个值).
一般来说,我正在寻找类似于R
的"回收"行为。
将reduce()
和pandas.tseries.index.DatetimeIndex
对象的append()
方法组合在一起实现了此目的。
import pandas as pd
import numpy as np
from string import ascii_uppercase
dt_rng = pd.date_range(start = pd.tseries.tools.to_datetime('2012-12-31'),
end = pd.tseries.tools.to_datetime('2014-12-28'),
freq = 'D')
df = pd.DataFrame(index = xrange(len(dt_rng) * 10),
columns = ['product', 'dt', 'unit_sales'])
df.product = sorted(np.tile([chr for chr in ascii_uppercase[:10]], len(dt_rng)))
df.dt = reduce(lambda x, y: x.append(y), [dt_rng] * 10)
df.unit_sales = np.random.random_integers(0, 25, len(dt_rng) * 10)