Python 如何将数据透视表中的列合并到索引中?
我有一个关于空气污染的数据框,用于以下匹配中的日期和时间:Python 如何将数据透视表中的列合并到索引中?,python,pandas,pivot,Python,Pandas,Pivot,我有一个关于空气污染的数据框,用于以下匹配中的日期和时间: Date Items 00 01 02 ... 23 2010-01-01 AMB_TEMP 8 10 ... 15 2010-01-01 CO 10 15 ... 20 ... 2010-01-0
Date Items 00 01 02 ... 23
2010-01-01 AMB_TEMP 8 10 ... 15
2010-01-01 CO 10 15 ... 20
...
2010-01-02 AMB_TEMP 2 5 ...
2010-01-02 CO 5 12 ...
...
2010-01-03 AMB_TEMP 5 25 ...
...
Match AMB_TEMP CO NO NO2
2010-01-01 00 8 10 .. ..
2010-01-01 01 10 15 .. ..
...
2010-01-01 23 15 20 .. ..
我想对每个匹配的日期和时间进行聚合,即获得如下数据帧:
Date Items 00 01 02 ... 23
2010-01-01 AMB_TEMP 8 10 ... 15
2010-01-01 CO 10 15 ... 20
...
2010-01-02 AMB_TEMP 2 5 ...
2010-01-02 CO 5 12 ...
...
2010-01-03 AMB_TEMP 5 25 ...
...
Match AMB_TEMP CO NO NO2
2010-01-01 00 8 10 .. ..
2010-01-01 01 10 15 .. ..
...
2010-01-01 23 15 20 .. ..
我知道我可以手动堆叠它们,但我想知道是否有更有效的方法来获取它们。现在,我所做的是:
df.pivot_table(values=df[df.columns[2:]], index='Date', columns='Items')
它返回:
0 1
Match AMB_TEMP CO NO NO2 ... AMB_TEMP CO NO NO2
2010-01-01 8 10 .. .. ... 10 15 .. ..
2010-01-02 2 5 .. .. ... 5 12 .. ..
...
2010-01-07 10 10 .. .. ... 10 NA .. ..
我不知道如何将日期和时间合并成“2010-01-01 00”、“2010-01-01”、“2010-01-01 02”。。。indexs?熊猫
melt
功能似乎完成了这项工作,或者至少部分完成了这项工作,使用pivot_table可以一路完成
melt
执行一种取消轴心的操作,如果我们在“00”到“23”列中使用它,它会将这些列翻转到行中
df2 = pd.melt(df,id_vars=['Date','Items'],value_vars=df[df.columns[2:]])
该行将返回此信息(我的数据与您的数据略有不同)
新的“变量”列包含以前的列标题,“值”包含旧值。现在,我们可以创建一个名为“Datetime”的新列来记录日期和新时间:
df2['Datetime'] = df2['Date'] + ' ' + df2['variable']
现在,如果我们在这个新的数据帧上运行pivot_table函数,我们将得到我认为是您的目标
df3 = df2.pivot_table(values='value',index='Datetime',columns='Items')
Items AMB_TEMP CO
Datetime
2010-01-01 00 8.0 10.0
2010-01-01 01 10.0 15.0
2010-01-01 02 15.0 20.0
2010-01-02 00 2.0 5.0
2010-01-02 01 5.0 12.0
2010-01-03 00 5.0 NaN
2010-01-03 01 25.0 NaN
这确实将这些新的日期时间保留为字符串,仅供参考。谢谢,这真的很有效!