我正在嘗試在 Pandas 中創建一個資料框,它有兩個變數(“date”和“time_of_day”,其中“date”是 120 個觀察值,持續 30 天(每天有四個觀察值:1,1,1,1; 2, 2,2,2; 等),然后第二個變數“time_of_day”以 1,2,3,4 的值重復 30 次。
我發現最接近這個問題的地方是: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 ))})
所以最終的資料框看起來像
| 日期 | time_of_day |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 2 | 4 |
非常感謝!
uj5u.com熱心網友回復:
你需要一次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'])
uj5u.com熱心網友回復:
合并中的新功能 cross
out = pd.DataFrame(range(1,31)).merge(pd.DataFrame([1, 2, 3, 4]),how='cross')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370824.html
