Name | Key | Value |
---|---|---|
Jack | sex | male |
Jack | country | USA |
Jack | hobby | sing |
Jack | age | 19 |
Bob | country | UK |
Bob | age | 20 |
Bob | weight | 70 |
Maria | sex | female |
Maria | weight | 50 |
转换成
Name | sex | cotruny | age | hobby | weight |
---|---|---|---|---|---|
Jack | male | USA | 19 | sing | Nan |
Bob | Nan | UK | 20 | Nan | 70 |
Maria | female | Nan | Nan | Nan | 50 |
列名我都已经写好了,但是不想跑循环往里塞数据,有什么好办法么?
在python中使用pandas的pivot_table函数来解决,代码如下:
import pandas as pd
df=pd.read_csv('t0308.csv')
df=df.astype(str)
res=pd.pivot_table(values=['Value'],index=['Name'],columns=['Key'],data=df,aggfunc=sum)
res.columns=res.columns.droplevel(0)
res=res.rename_axis([None], axis=1)
res=res.reset_index()
print(res)
运行结果:
F:\2022\pythontest>t5
Name age country hobby sex weight
0 Bob 20 UK NaN NaN 70
1 Jack 19 USA sing male NaN
2 Maria NaN NaN NaN female 50
如对你有帮助,请点击采纳按钮~~
貌似oracle 12以后有分组转置 , 其他的数据库不清楚。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!ORACLE和sqlserver都支持pivot来进行行列转换,而且超简单,
以下是oracle的写法
select *
from a
pivot(max(value)
for key in('sex' sex,
'country' country,
'hobby' hobby,
'age' age,
'weight' weight))