我一直在寻找一种重新排列数据框的方法。我的原始数据框如下所示:
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多个与治疗相关的列,有没有一种方法可以使用范围而不是键入每个单独的列?抱歉在开始时不清楚
答案 0 :(得分:1)
使用pd.wide_to_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