Python 关于转换的意外数据透视表
我使用pivot_table根据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
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函数中组合重复的列。