如何以重复相同日期系列的方式对一列进行重新排序?

How can I reorder one column in a way that the same serie of dates is repeated?

事情是这样的。

我正在构建一个数据框,以便我的学生可以在练习中使用它。 这就是我要找的:

id    date        n
0     2022-01-01  10
0     2022-01-02  30
0     2022-01-03  40
.
.
.
1     2022-01-01  0
1     2022-01-02  5
1     2022-01-03  16
.
.
.
2     2022-01-01  99
2     2022-02-01  100
2     2022-03-01  3300

这是一个非常简单的想法。我有一个面板数据,其中第一列是客户 ID,第二列是购买日期,n 是购买的数量。但是,我没能把第二列整理得井井有条。

这是我最远的距离:

ids = pd.Series(range(100)).repeat(10).reset_index(drop=True)

dates = pd.date_range(start = pd.Timestamp('2022-01-01'),end = pd.Timestamp('2022-01-10')).repeat(100)

purchases = pd.Series(np.random.randint(low=0, high=500, size=100*10))

df = pd.DataFrame(data={'ids':ids, 'dates':dates, 'purchases': purchases}, index=None)

如您所见,我没弄对。这是结果:

ids   dates        n
0     2022-01-01  10
0     2022-01-01  30
0     2022-01-01  40
.
.
.

关于如何更改列日期以便从 2022-01-01 开始的任何想法,但在第二行中我们需要获取 2022-01-02。所以我一次得到正确的顺序并重复。

这看起来很简单,但我找不到答案。

这会做你想做的事:

start_date = pd.Timestamp("2022-01-01")

purchase_low = 0
purchase_high = 500

num_ids = 100
num_days = 10

ids = np.repeat(np.arange(num_ids), num_days)
dates = np.tile(pd.date_range("2022-01-01", periods=num_days), num_ids)
purchases = np.random.randint(purchase_low, purchase_high, num_ids * num_days)

df = pd.DataFrame({"ids": ids, "dates": dates, "purchases": purchases})

输出:

     ids      dates  purchases
0      0 2022-01-01        193
1      0 2022-01-02        362
2      0 2022-01-03        218
3      0 2022-01-04        395
4      0 2022-01-05        172
..   ...        ...        ...
995   99 2022-01-06        454
996   99 2022-01-07        342
997   99 2022-01-08        356
998   99 2022-01-09        423
999   99 2022-01-10        104

[1000 rows x 3 columns]

您的方法的问题是 .repeat() 重复 每个元素 n 次,而您需要对日期做的是重复 每个序列 的日期 n 次。因此,为什么我对 ids 使用 .repeat,而对 dates 使用 .tile