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

将具有混合整数的列拆分为多列的元组

将具有混合整数的列拆分为多列的元组

森林海 2022-11-29 14:50:32
我有一个DF   a     b   0  (0,1) 11  1     (1,2)2  2     3所需的输出是:    w  x  y  z0   0  1  1  01   1  0  1  22   2  0  3  3问题是,元组可以有多个不同的长度。以下 tolist() 仅适用于长度为 2 的元组,不适用于混合列。df[['w', 'x']]=pd.DataFrame(df['a'].tolist(), index=df.index) 有任何想法吗?提前致谢。
查看完整描述

2 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

想法是添加元组 if 标量然后创建新列:


def f(col):

    return pd.DataFrame([x if isinstance(x, tuple) else (x, ) 

                        for x in col]).fillna(0).astype(int)


df[['w', 'x']]=df.pop('a').pipe(f)

df[['y', 'z']]=df.pop('b').pipe(f)


print (df)

   w  x  y  z

0  0  1  1  0

1  1  0  1  2

2  2  0  3  0

更通用的解决方案concat:


dfs= [pd.DataFrame([x if isinstance(x, tuple) else (x, ) for x in df.pop(c)], 

                    index=df.index) for c in df.columns]


df = pd.concat(dfs, axis=1, ignore_index=True).fillna(0).astype(int)


print (df)

   0  1  2  3

0  0  1  1  0

1  1  0  1  2

2  2  0  3  0


查看完整回答
反对 回复 2022-11-29
?
大话西游666

TA贡献1817条经验 获得超14个赞

您可以转换为,然后str转换strip为()split,


>>> df[['w', 'x']] = pd.DataFrame(df.pop('a')

                                    .astype(str)

                                    .str.strip('(/)')

                                    .str.split(',')

                                    .tolist()).fillna(0).astype(int)


>>> df[['y', 'z']] = pd.DataFrame(df.pop('b')

                                    .astype(str)

                                    .str.strip('(/)')

                                    .str.split(',')

                                    .tolist()).fillna(0).astype(int)


>>> df


   w  x  y  z

0  0  1  1  0

1  1  0  1  2

2  2  0  3  0


查看完整回答
反对 回复 2022-11-29
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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