Python 用于多个列的数据透视

Python 用于多个列的数据透视,python,pandas,Python,Pandas,我有一个看起来像-df=pd.dataframe(['10/03/2020','H1','x',2.5','10/03/2020','H2','x',3.5','10/03/2020','H1','y',2','10/03/2020','H2','y',3]],列=['Day','Hour','Var','Val']) 我希望结果是-pd.DataFrame([[10/03/2020',x',2.5,3.5],[10/03/2020',y',2,3]],columns=['Day',Var',H

我有一个看起来像-
df=pd.dataframe(['10/03/2020','H1','x',2.5','10/03/2020','H2','x',3.5','10/03/2020','H1','y',2','10/03/2020','H2','y',3]],列=['Day','Hour','Var','Val'])

我希望结果是-
pd.DataFrame([[10/03/2020',x',2.5,3.5],[10/03/2020',y',2,3]],columns=['Day',Var',H1',H2'])

在熊猫身上这样做的最佳方式是什么?
抱歉,如果这是一个重复的问题。如果是这样的话,请随意向我指出前面回答的问题

您可以使用
pivot
方法来完成大部分工作,然后使用
reset_index
将“Day”从索引移动到自己的列中。我之所以使用
rename\u axis
,是因为我不喜欢我的列索引有一个名称,并且认为这会给新用户带来麻烦:

pivotted_df = (
    df.pivot(index=["Day", "Var"], columns="Hour", values="Val")
    .rename_axis(columns=None)   # Remove the name of the column index. Visual purposes only 
    .reset_index()               # Insert "day" as a column instead of it being the index
)

print(pivotted_df)
          Day Var   H1   H2
0  10/03/2020   x  2.5  3.5
1  10/03/2020   y  2.0  3.0

我鼓励您尝试注释掉
重命名_轴(…)
重置_索引()
行中的每一行,以查看此过程的每一步,并可视化它们各自在做什么

pivotted_df=(df.pivot(index=[“Day”,“Var”],columns=“Hour”,values=“Val”)
当我使用这段代码时,它给了我一个错误-
ValueError:传递的值的长度是4,index意味着2
。我不知道这是版本问题还是什么。是的,我相信要通过索引超过1级,你需要版本>1。您可以使用
导入熊猫作为pd检查您的版本;打印(pd.\uuuu version\uuuuu)
如果无法升级,您可以尝试使用
pivot\u table
而不是
pivot
,但您需要检查输出,以确保在此过程中未聚合任何值。
          Day Var   H1   H2
0  10/03/2020   x  2.5  3.5
1  10/03/2020   y  2.0  3.0
pivotted_df = (
    df.pivot(index=["Day", "Var"], columns="Hour", values="Val")
    .rename_axis(columns=None)   # Remove the name of the column index. Visual purposes only 
    .reset_index()               # Insert "day" as a column instead of it being the index
)

print(pivotted_df)
          Day Var   H1   H2
0  10/03/2020   x  2.5  3.5
1  10/03/2020   y  2.0  3.0