堆叠 pandas 数据框 [英] Stacking Pandas Dataframe

查看:57
本文介绍了堆叠 pandas 数据框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下熊猫数据框,其中我在不同日期具有5个不同点的NDVI值-

  print(df )

>>
PSC英特尔
FID Lat Lon Lon Lon 23-五月18-五月25-五月28-五月
0 51.62 -63.81 -0.04 0.08 0.10 0.13
1 51.62 -63.80 -0.05 0.09 0.10 0.13
2 51.62 -63.80 -0.05 0.08 0.07 0.12
3 51.62 -63.80 -0.06 0.08 0.11 0.14
4 51.62 -63.80 -0.05 0.09 0.11 0.16

但是,我需要将它们转换为NDVI值堆叠的地方,并在其中显示一个新列以指示数据收集日期。所需格式如下-

  FID Lat Lon NVAL日期SAT 
0 51.62 -63.81 -0.04 5月23日PSC
1 51.62 -63.80 -0.05 5月23日PSC
2 51.62 -63.80 -0.05 5月23日PSC
3 51.62 -63.80 -0.06 5月23日PSC
4 51.62- 63.80 -0.05 5月23日PSC
0 51.62 -63.81 0.08 5月18日PSC
1 51.62 -63.80 0.09 5月18日PSC
2 51.62 -63.80 0.08 5月18日PSC
3 51.62 -63.80 0.08 5月PSC
4 51.62 -63.80 0.09 5月18日PSC
0 51.62 -63.81 0.10 5月25日Inter
1 51.62 -63.80 0.10 5月25日Inter
2 51.62 -63.80 0.07 5月25日中线
3 51.62 -63.80 0.11 5月25日中线
4 51.62 -63.80 0.11 5月25日中线
0 51.62 -63.81 0.13 5月28日中线
1 51.62 -63.80 0.13 5月28日国际米兰
2 51.62 -63.80 0.12 5月28日国际米兰
3 51.62 -63.80 0.14 5月28日国际米兰
4 51.62 -63.80 0.16 5月28日国际元?

解决方案

设置:

  from io import StringIO 
pd
df = pd.read_table(StringIO( FID Lat Lon 23-5月18日5月25日5月28日5月28日
0 51.62 -63.81 -0.04 0.08 0.10 0.13
1 51.62 -63.80 -0.05 0.09 0.10 0.13
2 51.62 -63.80 -0.05 0.08 0.07 0.12
3 51.62 -63.80 -0.06 0.08 0.11 0.14
4 51.62 -63.80 -0.05 0.09 0.11 0.16),sep ='\s +')

使用融化

  df = pd.melt(df,id_vars = ['FID','Lat','Lon'],var_name ='Date' ,value_name ='Value')

输出: df [['FID' , Lat, Lon, Value, Date]]

  FID Lat Lon起息日
0 0 51.62 -63.81 -0.04-5月23日
1 1 51.62 -63.80 -0.05 23- 5月
2 2 51.62 -63.80 -0.05 23月5月
3 3 51.62 -63.80 -0.06 5月23日
4 4 51.62 -63.80 -0.05 5月23日
5 0 51.62 -63.81 0.08 18-五月
6 1 51.62 -63.80 0.09 18-五月
7 2 51.62 -63.80 0.08 18-五月
8 3 51.62 -63.80 0.08 18-五月
9 4 51.62 -63.80 0.09 5月25日
10 0 51.62 -63.81 0.10 5月25日
11 1 51.62 -63.80 0.10 5月25日
12 2 51.62 -63.80 0.07 5月25日
13 3 51.62 -63.80 0.11 5月25日
14 4 51.62 -63.80 0.11 5月25日
15 0 51.62 -63.81 0.13 28月5月
16 1 51.62 -63.80 0.13 5月28日$ 5 b $ b 17 2 51.62 -63.80 0.12 5月28日
18 3 51.62 -63.80 0.14 5月28日
19 4 51.62 -63.80 0.16 5月28日


I have the following pandas data frame where I have NDVI value of 5 different points on different dates-

print (df)

>>>
                         PSC            Intel
FID   Lat    Lon    23-May  18-May  25-May  28-May
0   51.62   -63.81  -0.04   0.08    0.10    0.13
1   51.62   -63.80  -0.05   0.09    0.10    0.13
2   51.62   -63.80  -0.05   0.08    0.07    0.12
3   51.62   -63.80  -0.06   0.08    0.11    0.14
4   51.62   -63.80  -0.05   0.09    0.11    0.16

However, I need them converted where NDVI value will be stacked, and a new column will be there to indicate the data collection date. The required format is as follows -

FID Lat      Lon    NVAL    Date    SAT
0   51.62   -63.81  -0.04   23-May  PSC
1   51.62   -63.80  -0.05   23-May  PSC
2   51.62   -63.80  -0.05   23-May  PSC
3   51.62   -63.80  -0.06   23-May  PSC
4   51.62   -63.80  -0.05   23-May  PSC
0   51.62   -63.81  0.08    18-May  PSC
1   51.62   -63.80  0.09    18-May  PSC
2   51.62   -63.80  0.08    18-May  PSC
3   51.62   -63.80  0.08    18-May  PSC
4   51.62   -63.80  0.09    18-May  PSC
0   51.62   -63.81  0.10    25-May  Inter
1   51.62   -63.80  0.10    25-May  Inter
2   51.62   -63.80  0.07    25-May  Inter
3   51.62   -63.80  0.11    25-May  Inter
4   51.62   -63.80  0.11    25-May  Inter
0   51.62   -63.81  0.13    28-May  Inter
1   51.62   -63.80  0.13    28-May  Inter
2   51.62   -63.80  0.12    28-May  Inter
3   51.62   -63.80  0.14    28-May  Inter
4   51.62   -63.80  0.16    28-May  Inter

Is there any way to do that using the pandas or any other library of python?

解决方案

Setup:

from io import StringIO
import pandas as pd
df = pd.read_table(StringIO("""FID   Lat    Lon    23-May  18-May  25-May  28-May
0   51.62   -63.81  -0.04   0.08    0.10    0.13
1   51.62   -63.80  -0.05   0.09    0.10    0.13
2   51.62   -63.80  -0.05   0.08    0.07    0.12
3   51.62   -63.80  -0.06   0.08    0.11    0.14
4   51.62   -63.80  -0.05   0.09    0.11    0.16"""), sep='\s+')

Use melt:

df = pd.melt(df,id_vars=['FID','Lat','Lon'], var_name='Date', value_name='Value')

Output: df[['FID','Lat','Lon','Value','Date']]

    FID    Lat    Lon  Value    Date
0     0  51.62 -63.81  -0.04  23-May
1     1  51.62 -63.80  -0.05  23-May
2     2  51.62 -63.80  -0.05  23-May
3     3  51.62 -63.80  -0.06  23-May
4     4  51.62 -63.80  -0.05  23-May
5     0  51.62 -63.81   0.08  18-May
6     1  51.62 -63.80   0.09  18-May
7     2  51.62 -63.80   0.08  18-May
8     3  51.62 -63.80   0.08  18-May
9     4  51.62 -63.80   0.09  18-May
10    0  51.62 -63.81   0.10  25-May
11    1  51.62 -63.80   0.10  25-May
12    2  51.62 -63.80   0.07  25-May
13    3  51.62 -63.80   0.11  25-May
14    4  51.62 -63.80   0.11  25-May
15    0  51.62 -63.81   0.13  28-May
16    1  51.62 -63.80   0.13  28-May
17    2  51.62 -63.80   0.12  28-May
18    3  51.62 -63.80   0.14  28-May
19    4  51.62 -63.80   0.16  28-May

这篇关于堆叠 pandas 数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆