首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫:从多行到单线观测

熊猫:从多行到单线观测
EN

Stack Overflow用户
提问于 2018-10-19 17:55:07
回答 4查看 857关注 0票数 1

假设我有这样的数据:

代码语言:javascript
复制
df = pd.DataFrame({'index':['10a','10a','10a','20b','20b','20b','30c','30c','30c']
                   ,'var_vals': ['aaa','aaa','abb','bbb','bba','bbb','ccc','ccc','cab']
                   ,'var2_vals':['aga','aga','add','bgb','bbd','bgb','cdd','cdd','cda']})
display(df)

看起来是这样的:

代码语言:javascript
复制
    index   var_vals    var2_vals
0   10a     aaa         aga
1   10a     aaa         aga
2   10a     abb         add
3   20b     bbb         bgb
4   20b     bba         bbd
5   20b     bbb         bgb
6   30c     ccc         cdd
7   30c     ccc         cdd
8   30c     cab         cda

如何使用新列中的不同之处将输出转换为一行:

代码语言:javascript
复制
    index   var_vals     var_vals_0     var2_vals    var2_vals_0
0   10a     aaa             abb          aga            add
1   20b     bbb             bba          bgb            bbd
2   30c     ccc             cab          cdd            cda

我尝试过groupby,透视/枢轴_表,栈/解栈,但我要么以巨大的维度结束,要么数据丢失。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-10-19 18:04:16

这是另一个:

代码语言:javascript
复制
newdf = pd.DataFrame(df.groupby('index')['var_vals'].unique().tolist()).fillna('')
  1. tolist()将数据传回列表格式,这使我们能够重新创建数据,将其再次传递给pd.DataFrame()
  2. 填充物处理的事实,你可以有不同数量的单元组。

更新代码:

代码语言:javascript
复制
dfs = (pd.DataFrame(df.groupby('index')[i].unique().tolist()).fillna('').add_prefix(i+'_')
        for i in df.drop('index', 1))
df = pd.concat(dfs, axis=1)

完整示例

将熊猫作为pd导入

代码语言:javascript
复制
df = pd.DataFrame({'index':['10a','10a','10a','20b','20b','20b','30c','30c','30c']
                   ,'var_vals': ['aaa','aaa','abb','bbb','bba','bbb','ccc','ccc','cab']
                   ,'var2_vals':['aga','aga','add','bgb','bbd','bgb','cdd','cdd','cda']})

df = pd.concat(
    (pd.DataFrame(df.groupby('index')[i].unique().tolist()).fillna('').add_prefix(i+'_')
    for i in df.drop('index', 1)), axis=1)

print(df)

返回:

代码语言:javascript
复制
  var2_vals_0 var2_vals_1 var_vals_0 var_vals_1
0         aga         add        aaa        abb
1         bgb         bbd        bbb        bba
2         cdd         cda        ccc        cab
票数 3
EN

Stack Overflow用户

发布于 2018-10-19 17:58:17

一种通过groupby.apply的方法

代码语言:javascript
复制
df.groupby('index')['var_vals'].apply(lambda x: pd.Series(x.unique())).unstack()

         0    1
index          
10a    aaa  abb
20b    bbb  bba
30c    ccc  cab
票数 3
EN

Stack Overflow用户

发布于 2018-10-19 18:02:44

drop_duplicatespivot的结合

代码语言:javascript
复制
df.drop_duplicates().assign(key=lambda x : x.groupby('index').cumcount()).pivot('index','key','var_vals')
Out[910]: 
key      0    1
index          
10a    aaa  abb
20b    bbb  bba
30c    ccc  cab
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52897666

复制
相关文章

相似问题

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