Python数据帧的转换
如何转换以下数据帧 对此 我可以通过以下方式实现这一点:Python数据帧的转换,python,pandas,dataframe,Python,Pandas,Dataframe,如何转换以下数据帧 对此 我可以通过以下方式实现这一点: df=pd.read_csv(r"D:\Python_Test\df_test.csv") df1=pd.pivot_table(df,index=["Country","Region"], values="Value",columns="Type").reset_index() df_c=pd.DataFrame(df.groupb
df=pd.read_csv(r"D:\Python_Test\df_test.csv")
df1=pd.pivot_table(df,index=["Country","Region"], values="Value",columns="Type").reset_index()
df_c=pd.DataFrame(df.groupby(by="Country")["Value"].agg("sum")).rename(columns={"Value":"Country_Value"}).reset_index()
df_r=pd.DataFrame(df.groupby(by="Region")["Value"].agg("sum")).rename(columns={"Value":"Region_Value"}).reset_index()
df_final= pd.merge(pd.merge(df1,df_c,how="inner",on="Country"),df_r,how="inner",on="Region")
是否有更好/最简单的方法来实现这一点?使用并为透视添加表aggfunc='sum'
,用于更改默认聚合平均值:
df=pd.read_csv(r"D:\Python_Test\df_test.csv")
df_final=(df.pivot_table(index=["Country","Region"],
values="Value",
columns="Type",
aggfunc='sum')
.reset_index())
df_final['Country_Value'] = df_final.groupby(by="Country")["Value"].transform("sum")
df_final['Region_Value'] = df_final.groupby(by="Region")["Value"].transform("sum")
print (df_final)
只有groupby的条目数与pivot的条目数相同,但groupby的条目数为12行,pivot的条目数为6行时,此操作才有效。只有groupby的条目数与pivot的条目数相同时,此操作才有效。不理解,首先使用pivot
,然后对df1
中的新列进行聚合sum
。所以在transform
之后,所有的代码都工作得很好。@KVHP-或者您忘记了将agg
更改为transform
?我只使用了您的代码,但它不起作用。相反,我使用转换来操作实际的数据帧,并应用pivot@KVHP-您能将我的代码中的错误输出与您的数据一起添加到问题中吗?