我有一个熊猫数据框:
Name Date
Bob 2020-05-17
Alice 2020-04-01
下面是预期的结果:对于每个“名称”组,我想保留原始行,并在Date中保留过去2天的值的另外2行
Name Date
Bob 2020-05-17
Bob 2020-05-16
Bob 2020-05-15
Alice 2020-04-01
Alice 2020-03-31
Alice 2020-03-30
谢谢!
答案 0 :(得分:1)
在列表理解中使用pd.date_range
来内联assign
的日期,然后DataFrame.explode
:
df = (df.assign(Date=[pd.date_range(end=e, periods=3, freq='D')
for e in df['Date']])
.explode('Date'))
[出]
Name Date
0 Bob 2020-05-15
0 Bob 2020-05-16
0 Bob 2020-05-17
1 Alice 2020-03-30
1 Alice 2020-03-31
1 Alice 2020-04-01
如果日期排序很重要,则可能需要链接其他sort_values
方法,然后是sort_index
:
(df.assign(Date=[pd.date_range(end=e, periods=3, freq='D')
for e in df['Date']])
.explode('Date')
.sort_values(['Date'], ascending=False)
.sort_index())