首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据折叠到最少的列中?

如何将数据折叠到最少的列中?
EN

Stack Overflow用户
提问于 2021-08-04 09:57:08
回答 1查看 37关注 0票数 0

我有一个数据帧,其中每个记录都可能有多个值对(例如,email1与value1配对)。每条记录可以有0到6个这样的对。数据帧看起来有点像这样:

代码语言:javascript
复制
id email1      value1     email2     value2     email3      value3 ...
1  x@test.com  123        NaN        NaN        NaN         NaN
2  NaN         NaN        y@test.com 456        NaN         NaN
3  z@test.com  789        NaN        NaN        a@test.com  012
...

我想将值对向左移动,减少不必要的列的数量,并将上面的示例转换为如下所示:

代码语言:javascript
复制
id email1      value1     email2      value2     
1  x@test.com  123        NaN         NaN        
2  y@test.com  456        NaN         NaN
3  z@test.com  789        a@test.com  012        
...

做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-04 10:04:59

如果它修复了如果电子邮件是NaN,那么它的腐蚀值也是NaN,那么:

使用转置,然后使用agg(),然后再次转置,最后删除具有NaN的列:

代码语言:javascript
复制
df=df.T.agg(sorted,key=pd.isnull).T.dropna(axis=1,how='all')

代码语言:javascript
复制
df=(pd.DataFrame(df.agg(sorted,key=pd.isnull,axis=1).tolist(),columns=df.columns)
      .dropna(axis=1,how='all'))

df的输出

代码语言:javascript
复制
    id  email1      value1  email2      value2
0   1   x@test.com  123.0   NaN         NaN
1   2   y@test.com  456.0   NaN         NaN
2   3   z@test.com  789.0   a@test.com  12.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68649212

复制
相关文章

相似问题

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