gpt4 book ai didi

python - 将水平存储的数据转置为多行

转载 作者:行者123 更新时间:2023-12-05 03:17:18 25 4
gpt4 key购买 nike

我有一张工作表,我需要将数据从水平存储转换为垂直存储,即从:

<表类="s-表"><头>公司编号DoB名称DoB名称DoB名称<正文>ID 1DoB 1名称 1DoB 2名称 2DoB 3名称 3ID 2DoB 4名称 4DoB 5命名 5

收件人:

<表类="s-表"><头>公司编号DoB名称<正文>ID 1DoB 1名称 1ID 1DoB 2名称 2ID 1DoB 3名称 3ID 2DoB 4名称 4ID 2DoB 5命名 5

数据的结构使得 DoB/name 实体总是周期性地出现在行上,如上图所示。每行水平存储的实体数量可以从无到 16 个不等。

如何在 Python/Pandas(或其他软件)中解决这个问题?这是一次性的事情,因此性能并不是真正的问题。

感谢任何帮助!

最佳答案

您可以使用:

out = (df
.set_index('Company ID')
.pipe(lambda d: d.set_axis(
pd.MultiIndex
.from_arrays([d.columns,
d.groupby(level=0, axis=1).cumcount().add(1)]),
axis=1)
)
.stack()
.reset_index().drop(columns='level_1')

)

备选方案:

out = pd.concat([g.stack().droplevel(1).rename(k)
for k,g in df.set_index('Company ID').groupby(level=0, axis=1)],
axis=1).reset_index()

输出:

  Company ID    DoB    Name
0 ID 1 DoB 1 Name 1
1 ID 1 DoB 2 Name 2
2 ID 1 DoB 3 Name 3
3 ID 2 DoB 4 Name 4
4 ID 2 DoB 5 Name 5

关于python - 将水平存储的数据转置为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74179594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com