首页 > 解决方案 > 将一列拆分为多行

问题描述

我在数据框中有这些数据,代码列有几个值并且是对象数据类型。

在此处输入图像描述

我想按以下方式拆分行

结果 在此处输入图像描述

我试图通过使用更改数据类型

df['Code'] = df['Code'].astype(str)

然后尝试拆分逗号并根据 ID(唯一)重置索引,但我只得到两列值。我需要整个数据集。

df = (pd.DataFrame(df.Code.str.split(',').tolist(), index=df.ID).stack()).reset_index([0, 'ID'])
df.columns = ['ID', 'Code']

有人可以帮我吗?我不明白如何扭曲这段代码。

附上设置代码:

import pandas as pd

x = {'ID': ['1','2','3','4','5','6','7'],
        'A': ['a','b','c','a','b','b','c'],
        'B': ['z','x','y','x','y','z','x'],
        'C': ['s','d','w','','s','s','s'],
        'D': ['m','j','j','h','m','h','h'],
        'Code': ['AB,BC,A','AD,KL','AD,KL','AB,BC','A','A','B']
        }

df = pd.DataFrame(x, columns = ['ID', 'A','B','C','D','Code'])

df

标签: pythonpandasdataframe

解决方案


您可以先Code用逗号拆分列,,然后再用explode它来获得所需的输出。

df['Code']=df['Code'].str.split(',')
df=df.explode('Code')

输出:

  ID  A  B  C  D Code
0  1  a  z  s  m   AB
0  1  a  z  s  m   BC
0  1  a  z  s  m    A
1  2  b  x  d  j   AD
1  2  b  x  d  j   KL
2  3  c  y  w  j   AD
2  3  c  y  w  j   KL
3  4  a  x     h   AB
3  4  a  x     h   BC
4  5  b  y  s  m    A
5  6  b  z  s  h    A
6  7  c  x  s  h    B

如果需要,您可以用 NaN 替换空字符串


推荐阅读