我有一个数据表,看起来像这样:
Index | ref_num | year | jan_a | jan_b | jan_c | ... | dec_a | dec_b | dec_c
0 | 100 | 2000 | 10 | 15 | 8 | ... | 3 | 19 | 12
1 | 100 | 2001 | 8 | 18 | 2 | ... | 6 | 15 | 12
2 | 101 | 2000 | 18 | 11 | 0 | ... | 2 | 10 | 11
3 | 101 | 2001 | 9 | 13 | 9 | ... | 4 | 10 | 22
为了清楚起见,ref_num
是唯一标识符。有很多年,每年所有12个月,每个月有3个类别。我需要将其转换为以下格式:
Index | ref_num | date | a | b | c
0 | 100 | 01/2000 | 10 | 15 | 8
...
11 | 100 | 12/2000 | 3 | 19 | 12
...
23 | 100 | 12/2001 | 6 | 15 | 12
请注意,我不在乎这是否在熊猫中……它在一个csv文件中,因此,如果更容易在numpy中进行操作或在可以正常工作的文件中循环(我一直在盯着屏幕,现在已经无聊了几个小时)。
重新pd.wide_to_long
排列各列的名称,以便可以使用,然后结合年和月以构造所需的日期格式:
df.columns = [i if "_" not in i else "_".join(i.split("_")[::-1]) for i in df.columns]
s = (pd.wide_to_long(df, stubnames=list("abc"),
i=["Index", "num_ref", "year"],
j="month", sep="_", suffix=".*")
.reset_index())
s["date"] = pd.to_datetime(s["year"].astype(str)+" "+s["month"]).dt.strftime("%m/%Y")
print (s.drop(["year","month"], 1).rename(columns={"num_ref":"ref_num"}))
Index ref_num a b c date
0 0 100 10 15 8 01/2000
1 0 100 3 19 12 12/2000
2 1 100 8 18 2 01/2001
3 1 100 6 15 12 12/2001
4 2 101 18 11 0 01/2000
5 2 101 2 10 11 12/2000
6 3 101 9 13 9 01/2001
7 3 101 4 10 22 12/2001
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句