为了账号安全,请及时绑定邮箱和手机立即绑定

Python Dataframe:基于另一列创建列

Python Dataframe:基于另一列创建列

繁花如伊 2021-12-21 14:59:50
我有一个数据框,其中有一列(此处为“A”列)的重复值,我想转换此数据框,以便根据“A”列的值形成新列。例子df = pd.DataFrame({'A':range(4)*3, 'B':range(12),'C':range(12,24)})df    A   B   C0   0   0  121   1   1  132   2   2  143   3   3  154   0   4  165   1   5  176   2   6  187   3   7  198   0   8  209   1   9  2110  2  10  2211  3  11  23请注意,“A”列的值重复了 3 次。现在我想要最简单的解决方案,将其转换为具有此配置的另一个数据帧(请忽略列的命名,它仅用于描述目的,它们可以是任何东西):        B               C    A0  A1  A2  A3  A0  A1  A2  A30   0   1   2   3   12  13  14  151   4   5   6   7   16  17  18  192   8   9   10  11  20  21  22  23
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

这是一个pivot问题,所以使用


df.assign(idx=df.groupby('A').cumcount()).pivot('idx', 'A', ['B', 'C'])


     B              C            

A    0  1   2   3   0   1   2   3

idx                              

0    0  1   2   3  12  13  14  15

1    4  5   6   7  16  17  18  19

2    8  9  10  11  20  21  22  23

如果标题很重要,您可以使用MultiIndex.set_levels来修复它们。


u = df.assign(idx=df.groupby('A').cumcount()).pivot('idx', 'A', ['B', 'C'])

u.columns = u.columns.set_levels(

    ['A' + u.columns.levels[1].astype(str)], level=[1])

u


     B              C            

A   A0 A1  A2  A3  A0  A1  A2  A3

idx                              

0    0  1   2   3  12  13  14  15

1    4  5   6   7  16  17  18  19

2    8  9  10  11  20  21  22  23


查看完整回答
反对 回复 2021-12-21
?
守着一只汪

TA贡献1872条经验 获得超4个赞

您可能需要assigngroup help key by cumcount,然后执行unstack


yourdf=df.assign(D=df.groupby('A').cumcount(),A='A'+df.A.astype(str)).set_index(['D','A']).unstack()

   B              C            

A A0 A1  A2  A3  A0  A1  A2  A3

D                              

0  0  1   2   3  12  13  14  15

1  4  5   6   7  16  17  18  19

2  8  9  10  11  20  21  22  23


查看完整回答
反对 回复 2021-12-21
  • 2 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号