融化列并为日期列中的每一行添加 20 分钟

sec*_*ret 6 python dataframe pandas

我正在尝试使用此数据框(在此示例中为 1 行):

id    Date                    value_now    value+20min    value+60min    value+80min
0     2015-01-11 00:00:01        12             15            18             22
Run Code Online (Sandbox Code Playgroud)

并将其转换为:

id    Date                    Value
0     2015-01-11 00:00:01      12     
0     2015-01-11 00:20:01      15     
0     2015-01-11 00:40:01      18     
0     2015-01-11 01:00:01      22      
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我需要更改值以响应列并创建行,我知道我可以使用melt 来做到这一点,但我很难做到。请帮我解决这个问题..... 谢谢!

ank*_*_91 5

您可以融化数据框,然后使用该variable列并拆分,+然后使用拆分的右侧并转换为 timedelta 并将它们添加回日期:

final = df.melt(['id','Date'])
final['Date'] += pd.to_timedelta(final['variable'].str.split('+').str[1].fillna('0min'))
print(final.drop('variable',1))
Run Code Online (Sandbox Code Playgroud)
   id                Date  value
0   0 2015-01-11 00:00:01     12
1   0 2015-01-11 00:20:01     15
2   0 2015-01-11 00:40:01     18
3   0 2015-01-11 01:20:01     22
Run Code Online (Sandbox Code Playgroud)

@YOBEN_S 提出的另一种方法,您可以在变量列中找到数字并转换为 timedelta 并添加日期df.assign

final1 = (df.melt(['id','Date']).assign(Date=lambda x : 
        x['Date']+pd.to_timedelta(x['variable'].str.findall(r'\d+')
        .str[0].fillna(0).astype(float),unit='min')))
Run Code Online (Sandbox Code Playgroud)