在熊猫df中转置多行数据

时间:2019-06-08 12:14:24

标签: python pandas dataframe

我有下表显示了多年来英国每年的降雨量。我想转置它,以便每一行是一个月/年,并且数据是按时间顺序排列的。

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

任何帮助将不胜感激。

1 个答案:

答案 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...