python - 将数据框列分解为多行

标签 python pandas dataframe

我有一个大型数据框 a,我想将其拆分或分解为数据框 b (真实的数据框 a 包含 90 列)。

我试图寻找与此类似的问题的解决方案,但我没有找到,因为它与单元格中的值无关,而是与列名称相关。

任何指向解决方案或使用 pandas 库中现有函数的指针将不胜感激。

提前谢谢您。

from pandas import DataFrame
import numpy as np
# current df
a = DataFrame([{'ID': 'ID_1', 'A-1': 'a1', 'B-1':'b1','C-1':'c1', 'A-2': 'a2', 'B-2':'b2','C-2':'c2'}])

# desired df
b = DataFrame([{'ID': 'ID_1', 'A': 'a1', 'B':'b1', 'C':'c1'},
               {'ID': 'ID_1','A': 'a2', 'B':'b2','C':'c2'}])

当前 df current df

所需的 df desired df

我的一个想法是将此数据帧拆分为两个数据帧(数据帧 1 将包含从 A1 到 C1 的列,数据帧 2 将包含从 A2 到 C2 的列)将列重命名为 A/B/C ,然后将两者连接起来。但我不确定效率,因为我有 90 个列,这些列会随着时间的推移而增长。

最佳答案

此方法将生成一些中间列,稍后将其删除。

首先将标题中的标签(A-1,...)放入列中

df = pd.melt(a, id_vars=['ID'], var_name='label')

然后将标签拆分为字符和数字

df[['char', 'num']] = df['label'].str.split('-', expand=True)

最后在unstack之前删除标签set_index,并处理最终表格格式。

df.drop('label', axis=1)\
    .set_index(['ID', 'num', 'char'])\
    .unstack()\
    .droplevel(0, axis=1)\
    .reset_index()\
    .drop('num', axis=1)

关于python - 将数据框列分解为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70867360/

相关文章:

python - 垂直合并2个数据帧

python - 如果列中至少有一个特定值,则删除所有行

python - 使用 heartbleed python 脚本解码错误

python - python中的数据框和系列创建excel列

python - 强制 pandas 将列中的 (1,2) 解释为字符串而不是范围?

python - Pandas 在 x 轴上绘制 : Separate color for weekends, pretty-print 时间

python-3.x - 使用df索引范围的条件

r - 如何评估 data.frame 中的调用?

python - 大海捞针,什么是更好的解决方案?

python - 从 Python 缓慢插入 MySQL