我将尝试将一个由键值对组成的数据框转换为以键作为列,值作为单元格的表格。例如:
带有键值对的输入数据框:
>>>df = pd.DataFrame([['TIME', 'VAL1', 'VAL2', 'VAL3',
'TIME', 'VAL1', 'VAL2', 'VAL3'],
["00:00:01",1,2,3,"00:00:02", 1,2,3]]).T
0 1
0 TIME 00:00:01
1 VAL1 1
2 VAL2 2
3 VAL3 3
4 TIME 00:00:02
5 VAL1 1
6 VAL2 2
7 VAL3 3
我希望它看起来像这样:
TIME VAL1 VAL2 VAL3
00:00:01 1 2 3
00:00:02 1 2 3
我几乎可以通过数据透视表得到我想要的结果:
>>>df.pivot(columns=0, values=1)
TIME VAL1 VAL2 VAL3
0 00:00:01 None None None
1 None 1 None None
2 None None 2 None
3 None None None 3
4 00:00:02 None None None
5 None 1 None None
6 None None 2 None
7 None None None 3
我可以合并行以得到我想要的结果:
>>> df.pivot(columns=0, values=1).ffill().drop_duplicates(subset='TIME',
keep='last').set_index('TIME')
TIME VAL1 VAL2 VAL3
00:00:01 1 2 3
00:00:02 1 2 3
但这似乎是一种相当笨拙的方法,对于大数据集来说会浪费很多内存。有没有更简单的方法?
我试过查看 pd.DataFrame.from_items()
和 pd.DataFrame.from_records()
,但没有成功。
df['ID'] = (df.index=="TIME").cumsum()
。 - Zeugma