python - 将一列拆分为多行
问题描述
我在数据框中有这些数据,代码列有几个值并且是对象数据类型。
我想按以下方式拆分行
我试图通过使用更改数据类型
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
解决方案
您可以先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 替换空字符串
推荐阅读
- typescript - 有人可以帮我描述一下这个打字稿吗?
- orocrm - 如何将自定义图标添加到 Oro 前台菜单项?
- azure-active-directory - Azure AD:EnforceCloudPasswordPolicyForPasswordSyncedUsers 不适用于现有租户
- python - 使用 Sickle 从机构 OAI-PMH 存储库中检索所有记录的问题
- python - 如何按索引二进制值中 1 的数量顺序遍历列表?(最好是 Python)
- json - 属性 servicetoken 不能为空
- android - Android 图片未添加到图库,但调用了 OnScanCompletedListener
- angular - 来自 Api 的数据顺序不正确?
- git - 如何让 gitlab-ci 检出我的子模块?
- c# - 我在与列表有关的代码中看到了这一点,但我不确定它的作用