`numpy.tile()`自动排序 - 还有其他选择吗?

时间:2015-05-14 23:51:25

标签: python numpy pandas

我想初始化一个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-312013-01-01,...,2013-01-082013-01-09(前十个值)。

一般来说,我正在寻找类似于R的“回收”的行为。

1 个答案:

答案 0 :(得分:0)

reduce()对象的append()pandas.tseries.index.DatetimeIndex方法的组合起了作用。

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)