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 来做到这一点,但我很难做到。请帮我解决这个问题..... 谢谢!
您可以融化数据框,然后使用该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)