如何在 Pandas 数据框中重新排序字符串并插入新字符串

Ali*_*024 3 python dataframe pandas

我有一个如下所示的数据框。数据类型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
Run Code Online (Sandbox Code Playgroud)

如您所见,第 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
Run Code Online (Sandbox Code Playgroud)

所以最终我可以执行以下操作:

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)
Run Code Online (Sandbox Code Playgroud)

要达到这个理想的数据框:

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
Run Code Online (Sandbox Code Playgroud)

Shu*_*rma 6

我们可以跳过创建中间数据帧的部分,直接创建结果数据帧。在这里,我们可以使用str.findall找到标记对,例如(ab, 1), (bc, 2)等,它可以用来创建与每一行对应的记录,其中每条记录都包含列名作为键和相应的值,然后我们可以轻松地从这些记录中创建结果数据帧。

pd.DataFrame([*df['Output'].str.findall(r'(\S+)\s(\d+)').map(dict)], dtype=float)
Run Code Online (Sandbox Code Playgroud)
    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
Run Code Online (Sandbox Code Playgroud)