理解 Stack/Unstack/Pivot_Table/etc
Making Sense of Stack/Unstack/Pivot_Table/etc
我有一个 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)的文档,但我似乎不太明白这些函数的组合我需要做什么我想。我试图摆脱 "Element" 列,而是创建两个新列,"TMAX" 和 "TMIN"。这将使每一行成为一个独特的观察结果。每个 Date/ID 组合都有一个 TMAX 和 TMIN。所以理论上这个新数据框的高度是当前数据框的一半。
文档: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。
我有一个 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)的文档,但我似乎不太明白这些函数的组合我需要做什么我想。我试图摆脱 "Element" 列,而是创建两个新列,"TMAX" 和 "TMIN"。这将使每一行成为一个独特的观察结果。每个 Date/ID 组合都有一个 TMAX 和 TMIN。所以理论上这个新数据框的高度是当前数据框的一半。
文档: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。