我有一堆数据帧,全部由timestamp(datetime)
索引。
每个列都有几列,通常带有数值。
timestamp tag celc
2018-03-15 20:05:01.080 1 52
2018-03-15 20:05:23.630 1 52
2018-03-15 20:12:16.990 1 53
timestamp bpm
2018-03-15 20:05:01 50.00
2018-03-15 20:21:41 74.00
2018-03-15 20:38:21 65.33
我要做的是将它们转换为以下格式
timestamp label value
2018-03-15 20:05:01.000 bpm 50.00
2018-03-15 20:05:01.080 tag 1
2018-03-15 20:05:01.080 celc 52
2018-03-15 20:05:23.630 tag 1
2018-03-15 20:05:23.630 celc 52
2018-03-15 20:12:16.990 tag 1
2018-03-15 20:12:16.990 celc 53
2018-03-15 20:21:41.000 bpm 74.00
2018-03-15 20:38:21.000 bpm 65.33
我目前在组合表格上使用.stack()
:
pd.concat(dataframes, axis=1).sort_index().stack()
这会产生预期的结果。
我想知道这是否是“正确”,最有效的方法, 或者我是否应该这样做。
当输出不同的格式时,需要连接表,如果可以改进该功能,我也想知道。
答案 0 :(得分:2)
首先使用( 'Crime & Punishment', 'Goodnight Moon', 'The Singularity', 'One Fish Two Fish' )
取消对数据帧的取消,并将数据帧连接起来
( 'Narnia' )
DataFrame.melt
import pandas as pd
from io import StringIO
raw_data = ('''timestamp,tag,celc
2018-03-15 20:05:01.080,1,52
2018-03-15 20:05:23.630,1,52
2018-03-15 20:12:16.990,1,53''',
'''timestamp,bpm
2018-03-15 20:05:01,50.00
2018-03-15 20:21:41,74.00
2018-03-15 20:38:21,65.33''')
dataframes = [
pd.read_csv(StringIO(x)).assign(timestamp = lambda df:pd.to_datetime(df.timestamp))
for x in raw_data
]
连接前的pd.concat([df.melt('timestamp') for df in dataframes]).set_index('timestamp').sort_index()