我有下表显示了多年来英国每年的降雨量。我想转置它,以便每一行是一个月/年,并且数据是按时间顺序排列的。
Year JAN FEB MAR APR
2010 79.7 74.8 79.4 48
2011 102.8 114.5 49.7 36.7
2012 110.9 60 37 128
2013 110.5 59.8 64.6 63.6
我想要这样,因此表格看起来像下面的表格,其中以年,月和降雨量为列:
2010 JAN 79.7
2010 FEB 74.8
2010 MAR 79.4
2010 APR 48
2011 JAN 102.8
2011 FEB 114.5
我认为我需要使用for循环并遍历每一行以创建新的数据帧,但是我不确定语法。我尝试了以下循环,该循环几乎可以完成我想要的操作,但不会作为数据帧输出。
for index, row in weather.iterrows():
print(row["Year"],row)
2014.0 Year 2014.0
JAN 188.0
FEB 169.2
MAR 80.0
APR 67.8
MAY 99.6
JUN 54.8
JUL 64.7
任何帮助将不胜感激。
答案 0 :(得分:3)
您应避免使用for-loops
,而应使用stack
。
df.set_index('Year') \
.stack() \
.reset_index() \
.rename(columns={'level_1': 'Month', 0: 'Amount'})
Year Month Amount
0 2010 JAN 79.7
1 2010 FEB 74.8
2 2010 MAR 79.4
3 2010 APR 48.0
4 2011 JAN 102.8
5 2011 FEB 114.5
6 2011 MAR 49.7
7 2011 APR 36.7
8 2012 JAN 110.9
9 2012 FEB 60.0
etc...