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

给定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,0

2   20000017    1    0,0,0,0,0,12,12,12    

3   20000017    2    1-100-43,43,0,0,0,0,0,0

4   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

在某些情况下,一个人最终会得到同一个下标的两个值。在这种情况下,我宁愿将更长的代码嵌入到我的最终字符串中。


这可能吗?


如果是,如何?


哈士奇WWW
浏览 122回答 1
1回答

湖上湖

我认为您的输入数据存在一些差异,例如第一组最终有 9 个值,或者在第二组中您在不同行的同一位置有值(0 除外)。无论如何,这应该做你想做的,首先str.split是每个逗号的“my_string”列并展开,用于mask用 nan 替换 0,groupby在两列上执行 a,保持first值(不是 nan)可用,如果有的话,fillna0 是没有值的, agg用于join取回字符串和reset_indexdf_ = (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_agg0  20000017         1      53,53,53,1-100,100,100-11,12,121  20000017         2   1-100-43,43,82-100-41,41,53,53,0,02  20000231         1  41-100,100-41,41,41-100,100-1,0,0,0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python