【问题标题】:Transpose multiple rows of data in panda df [duplicate]在熊猫df中转置多行数据[重复]
【发布时间】:2019-10-23 16:00:15
【问题描述】:

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 不,您绝对不想要for 循环。您应该始终将其视为熊猫的最后手段。这是一个“从宽到长”的问题。

标签: python pandas dataframe


【解决方案1】:

您应该避免使用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...

【讨论】:

  • df.melt('Year',var_name='Month',value_name='Amount').sort_values('Year') :)
猜你喜欢
  • 1970-01-01
  • 2021-10-27
  • 2012-07-09
  • 2022-01-21
  • 2020-06-20
  • 2019-03-08
  • 2018-11-11
  • 1970-01-01
  • 2012-07-23
相关资源
最近更新 更多