Pandas的DataFrame数据转换

薛定谔之死猫 2014-06-27 12:08:59
下列代码中srcdf和desdf都是Pandas的DataFrame对象,需要将srcdf转换为desdf,也就是根据列中的值拓展新的列,关系数据库报表中常见的需求,请问用DataFrame要如何实现?
print(srcdf)
姓名 性别 科目 分数
编号
0 刘玄德 男 语文 98
1 刘玄德 男 数学 60
2 刘玄德 男 体育 50
3 关云长 男 语文 60
4 关云长 男 数学 60
5 关云长 男 体育 100

[6 rows x 4 columns]

print(desdf)
姓名 性别 语文 数学 体育 平均分
编号
0 刘玄德 男 98 60 50 66.666667
1 关云长 男 60 60 100 73.333333

[2 rows x 6 columns]
...全文
19390 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
littlely_ll 2018-06-20
  • 打赏
  • 举报
回复
有多个方法,先写下两种: 1
df.set_index(['姓名','性别','科目'])['分数'].unstack().reset_index()
2
df.pivot_table(values="分数", columns="科目", index=['姓名','性别'], 
               margins=True, margins_name='平均数').reset_index()
百事悠弦 2016-05-26
  • 打赏
  • 举报
回复
http://blog.csdn.net/zutsoft/article/details/51509124
cyyang 2014-08-20
  • 打赏
  • 举报
回复

from pandas import Series,DataFrame
a=[['刘玄德','男','语文',98.],['刘玄德','男','体育',60.],['关云长','男','数学',60.],['关云长','男','语文',100.]]
af=DataFrame(a,columns=['name','sex','course','score'])
af.set_index(['name','sex','course'],inplace='TRUE')
t1=af.unstack(level=2)
t2=t1.mean(axis=1,skipna=True)
t1['平均分']=t2
t1.fillna(0)
ImN1 2014-06-27
  • 打赏
  • 举报
回复
这个直接变形有点难,因为语文、数学、体育是不定数据内容,另外平均分肯定要算的 DF可以用SQL,你不如从这个入手解决

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧