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

对熊猫数据框中的字符串求和

对熊猫数据框中的字符串求和

哈士奇WWW 2022-12-27 15:43:33
给定df具有 100 万行的数据框:   HOUSEID   PERSONID         my_string  0   20000017    1    0,0,0,1-100,100,100-11,0,0    1   20000017    1    53,53,53,0,0,0,0,02   20000017    1    0,0,0,0,0,12,12,12    3   20000017    2    1-100-43,43,0,0,0,0,0,04   20000017    2    0,0,82-100-41,41,0,0,0,0     5   20000017    2    0,0,0,53,53,53,0,0    6   20000017    2    0,0,0,0,0,0,0,0    7   20000231    1    41-100,100-41,41,0,0,0,0,0  8   20000231    1    0,0,0,41-100,100-1,0,0,0在该列my_string中,有 8 个字符串(在我的真实数据帧中为 96 个)代码,由“,”(有时不止一个数字)分隔。对于HOUSEID和PERSONID(一个人)的每个唯一组合,我希望以“0”值填充同一个人其他行的相应下标的方式组合数字。这是所需的输出:       HOUSEID   PERSONID         my_string     0   20000017    1    53,53,53,1-100,100,100-11,12,12        1   20000017    2    1-100-43,43,82-100-41,41,53,53,0,0      2   20000231    1    41-100,100-41,41,41-100,100-1,0,0,0在某些情况下,一个人最终会得到同一个下标的两个值。在这种情况下,我宁愿将更长的代码嵌入到我的最终字符串中。这可能吗?如果是,如何?
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

我认为您的输入数据存在一些差异,例如第一组最终有 9 个值,或者在第二组中您在不同行的同一位置有值(0 除外)。


无论如何,这应该做你想做的,首先str.split是每个逗号的“my_string”列并展开,用于mask用 nan 替换 0,groupby在两列上执行 a,保持first值(不是 nan)可用,如果有的话,fillna0 是没有值的, agg用于join取回字符串和reset_index


df_ = (df['my_string'].str.split(',', expand=True)

         .mask(lambda x: x.eq('0'))

         .groupby([df['HOUSEID'], df['PERSONID']]) 

         .first()

         .fillna('0')

         .agg(','.join, axis=1)

         .reset_index(name='my_string_agg')

      )

print (df_)

    HOUSEID  PERSONID                        my_string_agg

0  20000017         1      53,53,53,1-100,100,100-11,12,12

1  20000017         2   1-100-43,43,82-100-41,41,53,53,0,0

2  20000231         1  41-100,100-41,41,41-100,100-1,0,0,0


查看完整回答
反对 回复 2022-12-27
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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