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