Python 选择dataframe中的特定列并追加到新行中

Python 选择dataframe中的特定列并追加到新行中,python,python-3.x,pandas,dataframe,jupyter-notebook,Python,Python 3.x,Pandas,Dataframe,Jupyter Notebook,我一直在想办法重新排列数据帧。我的原始数据帧如下所示: df: YOB Name Treatment_1 Date_1 Treatment_2 Date_2 0 1974 John A 2018-11-13 D 2018-12-13 1 1975 Jones B 2018-11-14 E 2018-12-14 2 1976 J

我一直在想办法重新排列数据帧。我的原始数据帧如下所示:

df:

   YOB    Name   Treatment_1   Date_1       Treatment_2    Date_2
0  1974   John       A        2018-11-13         D         2018-12-13
1  1975   Jones      B        2018-11-14         E         2018-12-14
2  1976   Jack       C        2018-11-15         F         2018-12-15
现在我希望我的数据框在不同的行上显示不同的治疗信息

df:
   YOB    Name   Treatment   Date      
0  1974   John       A      2018-11-13         
1  1974   John       D      2018-12-13
2  1975   Jones      B      2018-11-14         
3  1975   Jones      E      2018-12-14
4  1976   Jack       C      2018-11-15         
5  1976   Jack       F      2018-12-15
谁能帮我解释一下这件事,因为我已经被困了好几天了

提前谢谢你


注意:我已经简化了它,但是实际的数据集将有20多个与治疗相关的列,有没有一种方法可以使用范围而不是键入每一列?很抱歉开头不清楚

请使用
pd.wide\u to\u long

df = df.rename(columns={'Data_2':'Date_2'})  #Fix typo error first.

pd.wide_to_long(df, ['Date','Treatment'], i=['YOB','Name'], j='No', sep='_', suffix='\d+')\
  .reset_index()
输出:

    YOB   Name  No        Date Treatment
0  1974   John   1  2018-11-13         A
1  1974   John   2  2018-12-13         D
2  1975  Jones   1  2018-11-14         B
3  1975  Jones   2  2018-12-14         E
4  1976   Jack   1  2018-11-15         C
5  1976   Jack   2  2018-12-15         F

你试过什么?你有很多选择。考虑适当命名的.<代码> Pd。WuffytoToLon(DF,[处理],‘日期’),i=[ YOB’,“名称”],j=‘滴’,SEP=索引(level=[0,1])< /代码>我尝试了WiuthtoToLoLy,它工作,但是是否有一种更有效的方式而不是键入每个列,因为有超过22个相关的列,但具有相同的分隔符?很抱歉一开始不清楚:(我不这么认为,您必须在列上使用某种循环,并单独“融化”每一列,然后合并结果,或者您可能必须编写一些正则表达式逻辑,以便将列组一起提取,并在不键入完整列表的情况下为pd.wide_to_long构建参数。