我有以下数据:
import pandas as pd, numpy as np
data = [['id', 'date', 'b_field', 'a_field'],
['XYX', '01/01/2024', 100, 101],
['XYX', '01/02/2024', 200, 201],
['ABC', '01/01/2024', 300, 301],
['ABC', '01/02/2024', 400, 401]]
id_sort=['ABC', 'XYZ']
field_sort=['a_field', 'b_field']
df = pd.DataFrame(data[1:], columns=data[:1])
[![在此处输入图像描述][1]][1]
我想有效地转换它,这样如果我将其序列化为 csv 或 json 数组,它看起来像这样:
[![在此处输入图像描述][2]][2]
地点:
到目前为止我已经尝试了一些事情。我最接近的是以下:
df.set_index('date').reindex(pd.MultiIndex.from_product([id_sort, field_sort]),axis=1).reset_index()
当然,正如您所看到的,存在几个问题:
[![在此处输入图像描述][3]][3]
编辑: 对于#2,为了向下移动日期标签,看起来我可以这样做(不确定这是否是最好的方法):
df = df.rename(columns={'date': '', '':'date'})
``
[1]: https://i.sstatic.net/fmdYCJ6t.png
[2]: https://i.sstatic.net/fzlAY1W6.png
[3]: https://i.sstatic.net/z9ZNx5nm.png
这是一种方法:
df = pd.DataFrame(data[1:], columns=data[:1][0])
out = (
df
.set_index(['id', 'date'])
.unstack(0)
.swaplevel(axis=1)
.sort_index(axis=1)
.rename_axis(columns=(None, None))
)
输出
ABC XYX
a_field b_field a_field b_field
date
01/01/2024 301 300 101 100
01/02/2024 401 400 201 200