首页 > 解决方案 > 通过分隔多个字符串 ID 对所有 ID 组合进行分组

问题描述

现在我正在努力解决以下问题。我的数据框中有两个不同的 ID,leading_ID 和 follower_ID(字符串)。leading_ID 以一个唯一的 ID 为特征。但是follower_ID有三个不同的阶段:首先ID可以由None分配,其次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?没有工作。

标签: python-3.xpandasdataframe

解决方案


利用:

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

推荐阅读