我正在尝试在 Pandas 中创建一个数据框,它有两个变量(“date”和“time_of_day”,其中“date”是 30 天的 120 个观察值(每天有四个观察值:1,1,1,1 ; 2,2,2,2; 等),然后第二个变量“time_of_day)重复 30 次,值为 1,2,3,4。
我发现最接近这个问题的是:How to create a series of numbers using Pandas in Python ,这让我得到了下面的代码,但我收到一个错误,它必须是一维数组。
df = pd.DataFrame({'date': np.tile([pd.Series(range(1,31))],4), 'time_of_day': pd.Series(np.tile([1, 2, 3, 4],30 ))})
所以最终的数据框看起来像
非常感谢!
最佳答案
你需要一次 np.repeat
和一次 np.tile
df = pd.DataFrame({'date': np.repeat(range(1,31),4),
'time_of_day': np.tile([1, 2, 3, 4],30)})
print(df.head(10))
date time_of_day
0 1 1
1 1 2
2 1 3
3 1 4
4 2 1
5 2 2
6 2 3
7 2 4
8 3 1
9 3 2
或者你可以使用 pd.MultiIndex.from_product
, 结果相同。
df = (
pd.MultiIndex.from_product([range(1,31), range(1,5)],
names=['date','time_of_day'])
.to_frame(index=False)
)
或 product
来自 itertools
from itertools import product
df = pd.DataFrame(product(range(1,31), range(1,5)), columns=['date','time_of_day'])
https://stackoverflow.com/questions/70178114/