赋予数据框df
一百万行:
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
在某些情况下,一个人最终得到相同下标的两个值。在这种情况下,我希望将更长的代码嵌入到我的最终字符串中。
这可能吗?
如果是,怎么办?
答案 0 :(得分:4)
我认为您的输入数据中存在一些差异,例如,第一组最终以9个值结尾,或者第二组中您在不同行中的同一位置具有值(非0)。
无论如何,这应该做您想要的事情,首先用逗号str.split
列'my_string'并展开,使用mask
用nan替换0,在两列上执行groupby
,请保持first
值(不是nan)(如果有)可用,fillna
的值为0表示无值,agg
的值为join
以返回字符串,{{1} }
reset_index