问题描述
目标是取消显示下表
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是索引)
但是,我想知道有没有比循环更有效的方法。
p.s。我已经尝试过像OP中那样的建议,但是,它没有给出预期的输出
解决方法
如果我理解您的问题,则可以使用pd.wide_to_long:
label = '<span class="myClz">' + {Student[name] + '(' + "20" + ')' + '</span>'}
.myClz:not(:first-child) {
margin-left: 2rem;
}