亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對熊貓數據框中的字符串求和

對熊貓數據框中的字符串求和

哈士奇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 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號