python-3.x - 通过分隔多个字符串 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?没有工作。
解决方案
利用:
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
推荐阅读
- r - Apply a function on columns, without the result replacing the column values based on the outcome of the function
- java - 设置 Jenkins jnlp 代理以通过 API 以编程方式使用 WebSocket
- javascript - 关注 Vuetify 扩展面板中的输入
- android - 如何在没有FrameLayout的情况下在类似抽屉菜单的android片段之间切换?
- tabulator - 制表器下载完全没有样式
- javascript - 如何将 pdf 下载响应从 api (node/express) 传输到客户端 (react)?
- java - 想要从 android 应用程序小部件写入文件,但从小部件访问时 FileInputStream 为空
- python - 如何在python中解码部分转义的unicode字符串(混合unicode和转义unicode)?
- r - gganimate: data present only in some frames
- sql - Is there a way to use ST_BUFFER on Snowflake?