我有一个如下所示的数据框。 Output
的数据类型是字符串。
ID Output
1 ab 1, bc 2, ac 5, at 0, abc 0
2 ab 0, ac 5, at 0
3 ac 5, bc 0, atn 0
如您所见,在第 2 行中,bc
在整体顺序保持不变的情况下被跳过。但是,在 row3 中,顺序不同。如何首先插入缺失的类别,然后重新排序数据框中的字符串?换句话说,我怎样才能得到一个看起来像这样的中间数据框:ID Output
1 ab 1, bc 2, ac 5, at 0, abc 0, atn
2 ab 0, bc, ac 5, at 0, abc, atn
3 ab, bc 0, ac 5, at, abc, atn 0
所以最终我可以执行以下操作:x = df['Output'].str.split(",",expand=True,)
x.columns = x.iloc[0, :].str.extract(r"^(.*)\s+")[0]
x = x.apply(lambda x: x.str.replace(r"^(.*\s+)", ""))
df=pd.concat([df, x], axis=1)
要达到这个理想的数据框:ID ab bc ac at abc atn
1 1 2 5 0 0 None
2 0 None 5 0 None None
3 None 0 5 None None 0
最佳答案
我们可以跳过创建中间数据帧的部分,直接创建结果数据帧。在这里,我们可以使用 str.findall
找到 token 对,例如(ab, 1), (bc, 2)
等,可用于创建与每一行对应的记录,其中每条记录都包含列名作为键和对应的值,然后我们可以轻松地从这些记录中创建结果数据帧。
pd.DataFrame([*df['Output'].str.findall(r'(\S+)\s(\d+)').map(dict)], dtype=float)
ab bc ac at abc atn
0 1.0 2.0 5.0 0.0 0.0 NaN
1 0.0 NaN 5.0 0.0 NaN NaN
2 NaN 0.0 5.0 NaN NaN 0.0
关于python - 如何在 Pandas 数据框中重新排序字符串并插入新字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67217171/