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 将多行有序数据转为一行数据(一列转一行)