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

标签 python pandas dataframe

我有一个如下所示的数据框。 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/

相关文章:

Python 'subprocess' CalledProcessError : Command '[...]' returned non-zero exit status 1

python - 属性错误: 'FigureCanvasWxAgg' object has no attribute '_idletimer'

python - 如何在 BigQuery 客户端 Python API 中以原子方式覆盖表

python - 如何在 Python 中进行分组和求和而不计算重复值

python - python 如何处理 pandas 中凌乱的数据格式?

python - 使用 Pandas 从类似于 json 的列表中检索值

python - 在列出总共两列的每第二行之后插入索引?

python - 在 python 列表中保持日期顺序的同时插入缺失的日期

python - 使用英国日期格式加入 Pandas 数据框

scala - 为什么在使用 Spark sql 过滤特定聚合的行时出现类型不匹配?