首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将索引相同的列合并为1列(熊猫)

将索引相同的列合并为1列(熊猫)
EN

Stack Overflow用户
提问于 2022-02-23 21:50:09
回答 2查看 409关注 0票数 0

我有一张我想要转换的数据。我希望将这些列合并在一起,并将具有相同id的值显示为单独的行。

因此,从这一点来看:

代码语言:javascript
运行
复制
id  children1       children2     children3
1   No Children    NaN           NaN
2   12-16 years    17+ years     Nan
3   No Children    Nan           Nan
4   5-7 years      8-11 years    12-16 years

对此:

代码语言:javascript
运行
复制
id  children       
1   No Children    
2   12-16 years
2   17+ years     
3   No Children   
4   5-7 years
4   8-11 years
4   12-16 years

有什么简单的方法吗?

数据:

代码语言:javascript
运行
复制
{'id': [1, 2, 3, 4],
 'children1': ['No Children', '12-16 years', 'No Children', '5-7 years'],
 'children2': [nan, '17+ years', nan, '8-11 years'],
 'children3': [nan, nan, nan, '12-16 years']}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-23 21:58:44

我认为您正在寻找stack方法,它将列转换为索引。现在,要得到确切的形状,首先需要使用"id“(以便在set_index ing时将"id”保留为索引)。

代码语言:javascript
运行
复制
out = df.set_index('id').stack().droplevel(1).rename('children').reset_index()

输出:

代码语言:javascript
运行
复制
   id     children
0   1  No Children
1   2  12-16 years
2   2    17+ years
3   3  No Children
4   4    5-7 years
5   4   8-11 years
6   4  12-16 years
票数 0
EN

Stack Overflow用户

发布于 2022-02-23 22:09:59

代码语言:javascript
运行
复制
new = (df.set_index('id').agg(list,1)#Put all row values into a list except id
   .explode()#Ensure each element in a list is put in a row
   .replace('Nan', np.nan)# Make Nan -> NaN
   .dropna()#Drop all NaNs
   .to_frame('Children')#Rename column 0 to Childresn
  )

结果

代码语言:javascript
运行
复制
     Children
id            
1   NoChildren
2   12-16years
2     17+years
3   NoChildren
4     5-7years
4    8-11years
4   12-16years
​
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71244447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档