Python 关于转换的意外数据透视表

Python 关于转换的意外数据透视表,python,pandas,pivot-table,Python,Pandas,Pivot Table,我使用pivot_table根据ITEMID值将以下数据从行形状转换为列形状: import pandas as pd df = pd.DataFrame({'id': [36, 36, 36, 36, 36], 'VALUE': [86, 21, 85, 19, 87], 'ITEMID': [220045, 220210, 220045, 220210, 220045], 'TIME': [pd.to

我使用pivot_table根据
ITEMID
值将以下数据从行形状转换为列形状:

import pandas as pd

df = pd.DataFrame({'id': [36, 36, 36, 36, 36],
               'VALUE': [86, 21, 85, 19, 87],
               'ITEMID': [220045, 220210, 220045, 220210, 220045],
               'TIME': [pd.to_datetime('2134-05-12 13:00:00'),
                             pd.to_datetime('2134-05-12 13:00:00'),
                             pd.to_datetime('2134-05-12 14:00:00'),
                             pd.to_datetime('2134-05-12 14:00:00'),
                             pd.to_datetime('2134-05-12 15:00:00')]})
if __name__ == '__main__':
    print(df.head())
    df = df.pivot_table(index=['id', 'TIME'],
                        columns='ITEMID',
                        values='VALUE', aggfunc='sum').reset_index()
    print(df)
但我得到了意想不到的结果:

|ITEMID|id |TIME                |220045  |220210  | 
|------|---|--------------------|--------|--------|
|0     |36 |2134-05-12 13:00:00 |86.0    |21.0    |
|1     |36 |2134-05-12 14:00:00 |85.0    |19.0    |
|2     |36 |2134-05-12 15:00:00 |87.0    |NaN     |
而这些列应该是

|id |TIME |220045 |220210 |220045 |220210|220045 |
|---|-----|-------|-------|-------|------|-------| 

我为
ITEMID
创建了一个类似索引的列,一些
ITEMID
s被转换为按列的形状。我不确定导致此结果的原因。

由于
ITEMID
作为
传递给
pivot\u表
,因此生成的数据帧具有非空的列名称。尝试重命名轴:

(df.pivot_table(index=['id', 'TIME'],
                        columns='ITEMID',
                        values='VALUE', aggfunc='sum').reset_index()
  .rename_axis(columns=None))
输出:

   id                TIME  220045  220210
0  36 2134-05-12 13:00:00    86.0    21.0
1  36 2134-05-12 14:00:00    85.0    19.0
2  36 2134-05-12 15:00:00    87.0     NaN

由于
ITEMID
作为
columns
传递给
pivot\u table
,因此生成的数据帧具有非空的列名称。尝试重命名轴:

(df.pivot_table(index=['id', 'TIME'],
                        columns='ITEMID',
                        values='VALUE', aggfunc='sum').reset_index()
  .rename_axis(columns=None))
输出:

   id                TIME  220045  220210
0  36 2134-05-12 13:00:00    86.0    21.0
1  36 2134-05-12 14:00:00    85.0    19.0
2  36 2134-05-12 15:00:00    87.0     NaN

谢谢你的回复。但是,为什么我们不为所有
ITEMID
s设置单独的列呢?我希望结果中的每个
ITEMID
都有一列。在Pandas中不鼓励使用重复的列名。预期的输出没有指定如何填充
时间
列。你当然应该更新你的问题。我将很快删除这个答案。谢谢,这对我来说是有意义的。我想pandas将在pivot函数中合并重复的列。谢谢您的回复。但是,为什么我们不为所有
ITEMID
s设置单独的列呢?我希望结果中的每个
ITEMID
都有一列。在Pandas中不鼓励使用重复的列名。预期的输出没有指定如何填充
时间
列。你当然应该更新你的问题。我将很快删除这个答案。谢谢,这对我来说是有意义的。我猜pandas将在pivot函数中组合重复的列。