pandas 一列转多行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas 一列转多行相关的知识,希望对你有一定的参考价值。


我们常有这样一个需求,把一列的值分割扩展为多行

>>>x = pd.DataFrame(1:range(4), 2:range(4,8), 3:[str(_) + , + str(_) for _ in range(8,12)])

1 2 3
0 0 4 8,8
1 1 5 9,9
2 2 6 10,10
3 3 7 11,11

转为如下形式

>>>x.drop(3,axis=1).join(x[3].str.split(,,expand=True).stack().reset_index(level=1,drop=1).rename(new_3))
1 2 new_3
0 0 4 8
0 0 4 8
1 1 5 9
1 1 5 9
2 2 6 10
2 2 6 10
3 3 7 11
3 3 7 11
...

我们通过​​join​​来组合原dataframe和分割后的dataframe

​join​​默认按索引、left模式合并两个dataframe,因此只需要join索引对应split后的结果即可

# 分割第3列,可以看到展开为两列,展开的列数按最大列数
>>>x[3].str.split(,,expand=True)
0 1
0 8 8
1 9 9
2 10 10
3 11 11
# 合并多列,这里会生成多级索引
>>>x.stack()
0 0 8
1 8
1 0 9
1 9
2 0 10
1 10
3 0 11
1 11
# 删除第1级索引
>>>x.reset_index(level=1,drop=True)
0 8
0 8
1 9
1 9
2 10
2 10
3 11
3 11
# 接下来重命名,join即可
>>>x.drop(3,axis=1).join(x[3].str.split(,,expand=True).stack().reset_index(level=1,drop=1).rename(new_3))
1 2 new_3
0 0 4 8
0 0 4 8
1 1 5 9
1 1 5 9
2 2 6 10
2 2 6 10
3 3 7 11
3 3 7 11


以上是关于pandas 一列转多行的主要内容,如果未能解决你的问题,请参考以下文章

数据分析--积累--presto--一列转多行--数组分割展开

数据分析--积累--presto--一列转多行--数组分割展开

PCB SQL MS 将多行有序数据转为一行数据(一列转一行)

MySQL关联表多行转多列?

Pandas: 如何将一列中的文本拆分为多行? | Python

列转多行---Mysql