繁体   English   中英

堆叠Pandas Dataframe

[英]Stacking Pandas Dataframe

我有以下pandas数据框,我在不同日期有NDVI值5个不同点 -

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

但是,我需要将它们转换为堆叠NDVI值,并在那里添加一个新列来指示数据收集日期。 所需格式如下 -

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

有没有办法使用熊猫或任何其他python库?

使用函数stack()

#Creating DataFrame 
df=pd.DataFrame({'FID':[0,1,2,3,4],'Lat':[51.62,51.62,51.62,51.62,51.62],'Lon':[-63.81,-63.80,-63.80,-63.80,-63.80],'23-May':[-.04,-.05,-.05,-.06,-.05],'18-May':[0.08,0.09,0.08,0.08,0.09],'25-May':[.1,.1,.07,.11,.11],'28-May':[0.13,.13,.12,.14,.16]})
df=df[['FID','Lat','Lon','23-May','18-May','25-May','28-May']]    

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

df_stacked=df.set_index(['FID','Lat','Lon']).stack().reset_index()
df_stacked=df_stacked.rename(columns={'level_3':'Date',0:'Value'})
df_stacked=df_stacked[['FID','Lat','Lon','Value','Date']]

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

建立:

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+')

使用熔化

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

输出: 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM