目标是取消下表中的PIVOT
Activity General m1 t1 m2 t2 m3 t3
0 P1 AA A1 TA1 A2 TA2 A3 TA3
1 P2 BB B1 TB1 B2 TB2 B3 TB3
转换为以下格式
Activity General M Task
0 P1 AA A1 TA1
1 P1 AA A2 TA2
2 P1 AA A3 TA3
3 P2 BB B1 TB1
4 P2 BB B2 TB2
5 P2 BB B3 TB3
根据一些阅读,模块melt
可用于实现预期目标
import pandas as pd
from pandas import DataFrame
list_me = [['P1','AA','A1','TA1','A2','TA2','A3','TA3'],
['P2', 'BB', 'B1', 'TB1', 'B2', 'TB2', 'B3', 'TB3']]
df = DataFrame (list_me)
df.columns = ['Activity','General','m1','t1','m2','t2','m3','t3']
melted_form=pd.melt(df, id_vars=['Activity','General'],var_name='m1',value_name='new_col')
然而,在网上发现的大多数例子都是针对单个列的。我正在考虑使用for循环来循环m1 m2
和m3
并同时合并结果。这是因为,实际上,m_i和t_i的对在数百的范围内(其中i是索引)
但是,我想知道还有比循环更有效的方法
顺便说一句,我曾尝试过在OP中提出的建议,但它没有给出预期的结果
如果我理解你的问题,你可以使用pd.wide_to_long:
相关问题 更多 >
编程相关推荐