通过分隔多个字符串ID对ID的所有组合进行分组

时间:2019-01-04 11:12:23

标签: python-3.x pandas dataframe

现在,我正在努力解决以下问题。我的数据框中有两个不同的ID,即Leading_ID和follower_ID(字符串)。 Leading_ID的特征在于一个唯一的ID。但是follower_ID具有三个不同的阶段:第一,ID可以由“无”分配,第二,ID可以由一个ID分配,第三,该ID具有多个以逗号分隔的ID。下表具体显示了结构:

leading_ID   follower_ID
abcd         None
dfgh         cvnr,eee,rrrr
jrtz         brtz
vvvv         tttt,dddd
wwww         None
...          ...

我的目标是将所有follower_ID分开,并按照Leading_ID进行分组。因此,应删除由None分配的所有follower_ID。

leading_ID   follower_ID
dfgh         cvnr
dfgh         eee
dfgh         rrrr
jrtz         brtz
vvvv         tttt
vvvv         dddd
...          ...

通过执行我的代码似乎永远不会结束或花很长时间。

from  itertools import product
df1 = pd.DataFrame([j for i in df['follower_ID'].dropna().apply(lambda x: x.split(',')).values 
                      for j in product(*i)], columns=df.leading_ID)

How do I unnest (explode) a column in a pandas DataFrame?中描述的方法无效。

1 个答案:

答案 0 :(得分:2)

使用:

from itertools import chain

#remove missing values
df = df.dropna()
#for better performance list comprehension with split
s = [x.split(', ') for x in df['follower_ID']]
#repeat values with flattening
df = pd.DataFrame({
     'user' : df['leading_ID'].repeat([len(x) for x in s]),
    'follower_ID' : list(chain.from_iterable(s))
})

print (df)
   user follower_ID
1  dfgh        cvnr
1  dfgh         eee
1  dfgh        rrrr
2  jrtz        brtz
3  vvvv        tttt
3  vvvv        dddd