Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将数据透视表中的列合并到索引中?_Python_Pandas_Pivot - Fatal编程技术网

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

这确实将这些新的日期时间保留为字符串,仅供参考。

谢谢,这真的很有效!