python - Pandas:将列中的列表拆分为多行
问题描述
我有一个关于将数据框列中的列表拆分为多行的问题。
假设我有这个数据框:
Job position Job type id
0 [6] [1] 3
1 [2, 6] [3, 6, 5] 4
2 [1] [9] 43
我想要数字的每一个组合,所以最终结果是:
id Job position Job type
0 3 6.0 1.0
1 4 2.0 3.0
2 4 2.0 6.0
3 4 2.0 5.0
4 4 6.0 3.0
5 4 6.0 6.0
6 4 6.0 5.0
7 43 1.0 9.0
因为现在我得到了这个结果:
id Job position Job type
0 3 6.0 1.0
1 4 2.0 3.0
2 4 6.0 6.0
3 4 NaN 5.0
4 43 1.0 9.0
为了得到上面的结果,我做了:
df = df.set_index(['id'])
(df.apply(lambda x: pd.DataFrame(x.tolist(),index=x.index)
.stack()
.rename(x.name)).reset_index())
解决方案
与 Scott Boston 的建议类似,我建议您分别分解列,然后将它们合并在一起。
例如,对于“职位”:
>>> df['Job position'].apply(pd.Series).reset_index().melt(id_vars='index').dropna()[['index', 'value']].set_index('index')
value
index
0 6.0
1 2.0
2 1.0
1 6.0
而且,一起:
df = pd.DataFrame({'Job position': [[6], [2, 6], [1]], 'Job type': [[1], [3, 6, 5], [9]], 'id': [3, 4, 43]})
jobs = df['Job position'].apply(pd.Series).reset_index().melt(id_vars='index').dropna()[['index', 'value']].set_index('index')
types = df['Job type'].apply(pd.Series).reset_index().melt(id_vars='index').dropna()[['index', 'value']].set_index('index')
>>> pd.merge(
pd.merge(
jobs,
types,
left_index=True,
right_index=True),
df[['id']],
left_index=True,
right_index=True).rename(columns={'value_x': 'Job positions', 'value_y': 'Job type'})
Job positions Job type id
0 6.0 1.0 3
1 2.0 3.0 4
1 2.0 6.0 4
1 2.0 5.0 4
1 6.0 3.0 4
1 6.0 6.0 4
1 6.0 5.0 4
2 1.0 9.0 43
推荐阅读
- python - 用字符串计算 64 岁以上的人
- java - 数组中数字的循环移位(Java)
- java - 如何向被请求方发送客户端的 SOAP 响应
- ruby-on-rails - ActionView::Template::Error(未定义的方法 `empty?' for nil:NilClass):
- sql - 如何实现关键字层次结构
- c# - Entity Framework Core 5.0 - 多对多与映射表中的附加字段
- angular - 尝试监视 moment.js 函数时出现问题
- java - java石英调度程序在来自Oracle表的特定时间运行
- amazon-web-services - AWS ELB - ECS - RDS 堆栈延迟
- javascript - 空的javascript数组被认为是字符串?