首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >巨蟒熊猫重塑数据通道

巨蟒熊猫重塑数据通道
EN

Stack Overflow用户
提问于 2017-04-11 19:58:22
回答 2查看 73关注 0票数 1

我有两个列:id1id2

代码语言:javascript
复制
df = pd.DataFrame({'id1': list('ABCBAC'), 'id2': [12,13,12,11,13,13]})
print(df)

id1     id2
A       123
B       13
C       12
B       11
A       13
C       132

我想重塑它(使用,群,或者枢轴?)获得以下信息:

代码语言:javascript
复制
id1      id2-1    id2-2
A        123       13
B        13        11
C        12        132

注意,每个id1都有两行,但是有大量不同的id2值(所以我不想做一个热向量编码)。

如果输出可以按字典顺序排序,则有一种偏好,以便给出如下结果:

代码语言:javascript
复制
id1      id2-1    id2-2
A        13       123
B        11       13
C        12       132

即,对于每一行,对id2-1id2-2中的值进行排序(参见对应于id1 == 'B'的行)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-11 22:53:48

计划

  • 我们希望创建一个索引,每次我们看到'id1'中的值。为此,我们将使用groupby('id1'),然后使用cumcount()为我们提供新的索引。
  • 然后,我们将索引设置为带有pd.MultiIndexset_index
  • 使用pd.MultiIndex,我们被设置为unstack
  • 最后,我们用一些棘手的映射来重命名这些列。
代码语言:javascript
复制
d = df.set_index(['id1', df.groupby('id1').cumcount() + 1]).unstack()
d.columns = d.columns.to_series().map('{0[0]}-{0[1]}'.format)

print(d)

     id2-1  id2-2
id1              
A       12     13
B       13     11
C       12     13
票数 3
EN

Stack Overflow用户

发布于 2017-04-11 20:09:20

这应该可以做到:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({'id1': list('ABCBAC'), 'id2': [123,13,12,11,13,132]})
df['id2'] = df['id2'].astype(str)
df = df.groupby(['id1']).agg(lambda x: '-'.join(x))
df['id2-1'] = df['id2'].apply(lambda x: x.split('-')[0]).astype(int)
df['id2-2'] = df['id2'].apply(lambda x: x.split('-')[1]).astype(int)
df = df.reset_index()[['id1', 'id2-1', 'id2-2']]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43355147

复制
相关文章

相似问题

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