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构建参数。