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
添加回答
举报
