了解堆栈/取消堆栈/数据透视表/等

时间:2018-12-03 21:15:45

标签: pandas dataframe data-cleaning

我有一个如下所示的Pandas DataFrame:

    ID           Date      Element  Temperature (C)
0   USW00094889 2014-11-12  TMAX    2.2
1   USC00208972 2009-04-29  TMIN    5.6
2   USC00200032 2008-05-26  TMAX    27.8
3   USC00205563 2005-11-11  TMAX    13.9
4   USC00200230 2014-02-27  TMAX    -10.6

我一直在注视着有关堆栈和非堆栈功能以及诸如melt和pivot_table之类的相关功能的文档,但是我似乎还不太清楚我需要做的事情。我试图摆脱“元素”列,而是创建两个新列“ TMAX”和“ TMIN”。这将使每一行都是唯一的观察结果。每个日期/ ID组合都有一个TMAX和TMIN。因此,从理论上讲,此新数据框将是当前数据框高度的一半。

1 个答案:

答案 0 :(得分:0)

文档:https://pandas.pydata.org/pandas-docs/stable/reshaping.html

创建DF并创建所需的多索引。

"""
ID,Date,Element,Temperature (C)
USW00094889,2014-11-12,TMAX,2.2
USC00208972,2009-04-29,TMIN,5.6
USC00200032,2008-05-26,TMAX,27.8
USC00205563,2005-11-11,TMAX,13.9
USC00200230,2014-02-27,TMAX,-10.6
"""
import pandas as pd
df = pd.read_clipboard(sep=",").set_index(["ID", "Date"])
print(df)

输出:

                       Element  Temperature (C)
ID          Date                               
USW00094889 2014-11-12    TMAX              2.2
USC00208972 2009-04-29    TMIN              5.6
USC00200032 2008-05-26    TMAX             27.8
USC00205563 2005-11-11    TMAX             13.9
USC00200230 2014-02-27    TMAX            -10.6

df.pivot(index=df.index, columns="Element")

输出:

                       Temperature (C)     
Element                           TMAX TMIN
ID          Date                           
USC00200032 2008-05-26            27.8  NaN
USC00200230 2014-02-27           -10.6  NaN
USC00205563 2005-11-11            13.9  NaN
USC00208972 2009-04-29             NaN  5.6
USW00094889 2014-11-12             2.2  NaN

请注意,我从样本df中删除了数字ID。