python pandas 行转列_pandas行转列、列转行、以及一行生成多行

楔子

笔者曾经碰到过两种格式的数据,当时确实把我难住了,最后虽然解决了,但是方法不够优雅,而且效率也不高,如果想高效率,那么就必须使用pandas提供的方法。而pandas作为很强的一个库,一定可以优雅地解决。当时用自己的方法解决之后,就没有之后了。但是最近又碰到了当时的情况,于是决定要优雅地解决,最后经过努力总算找到了解决的办法,下面先来看看当时难住笔者的两种格式的数据、以及需求吧。

需求一:

有以下格式的数据:

姓名 科目 成绩

小红 语文 90

小红 数学 90

小红 英语 90

小胖 语文 91

小胖 数学 91

小胖 英语 91

小花 语文 92

小花 数学 92

小花 英语 92

我们要变成以下的样子

姓名 语文 数学 英语

小红 90 90 90

小胖 91 91 91

小花 92 92 92

需求二:

姓名 年龄 爱好

小红 18 跳舞,唱歌,钢琴

小胖 20 唱,跳,rap,篮球

小花 19 古筝,翻译

我们要变成以下的样子

姓名 年龄 爱好

小红 18 跳舞

小红 18 唱歌

小红 18 钢琴

小胖 20 唱

小胖 20 跳

小胖 20 rap

小胖 20 篮球

小花 19 古筝

小花 19 翻译

解决需求一

unstack

print(df)

"""

姓名 科目 分数

0 小红 语文 90

1 小红 数学 90

2 小红 英语 90

3 小胖 语文 91

4 小胖 数学 91

5 小胖 英语 91

6 小花 语文 92

7 小花 数学 92

8 小花 英语 92

"""

# 将姓名和科目设置索引,然后只取出"分数",得到对应的二级索引Series对象

df = df.set_index(["姓名", "科目"])

two_level_index_series = df["分数"]

# 此时得到的是一个具有二级索引的series

print(two_level_index_series)

"""

姓名 科目

小红 语文 90

数学 90

英语 90

小胖 语文 91

数学 91

英语 91

小花 语文 92

数学 92

英语 92

Name: 分数, dtype: int64

"""

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值