我有一个如下所示的数据集:

Category    Date 1     Date 2
a         2017-01-01  2017-08-01

我想要做的是转置这些数据,以便我在两个日期之间的每个月都有一个记录
例如
Category Date
a        2017-01-01
a        2017-02-01
a        2017-03-01
.....
a        2017-08-01

我需要在 python 中执行此操作,并且我的数据已经在 Pandas 数据框中。日期采用日期戳格式 YYYY-MM-DD

最佳答案

使用 pd.date_range 的理解

pd.DataFrame(
    [[c, d] for c, d1, d2 in df.itertuples(index=False)
     for d in pd.date_range(d1, d2, freq='MS')],
    columns=['Category', 'Date']
)

  Category       Date
0        a 2017-01-01
1        a 2017-02-01
2        a 2017-03-01
3        a 2017-04-01
4        a 2017-05-01
5        a 2017-06-01
6        a 2017-07-01
7        a 2017-08-01

如果您有 3 个以上的列并且只需要 CategoryDate
pd.DataFrame(
    [[c, d] for c, d1, d2, *_ in df.itertuples(index=False)
     for d in pd.date_range(d1, d2, freq='MS')],
    columns=['Category', 'Date']
)
*_ 解包元组的其余部分。

否则,我们可以捕获整个元组并只获取我们需要的位。
pd.DataFrame(
    [[t[0], d] for t in df.itertuples(index=False)
     for d in pd.date_range(t[1], t[2], freq='MS')],
    columns=['Category', 'Date']
)

关于Python:转置数据以在两个日期之间为每个月创建记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47171944/

10-12 17:02
查看更多