我有一个大型数据框 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'}])
我的一个想法是将此数据帧拆分为两个数据帧(数据帧 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/