gpt4 book ai didi

python - 如何从数据框中的字符串创建列?

转载 作者:行者123 更新时间:2023-12-02 02:10:50 25 4
gpt4 key购买 nike

我有什么:

import pandas as pd
inp = [{'long string':'ha: (tra: 1 la: 2) \n hi: (tra: 1 la: 2) \n ho: (tra: 1 la: 2)'},
{'long string':'hi: (tra: 1 la: 2) \n ha: (tra: 1 la: 2) \n ho: (tra: 1 la: 2)'},
{'long string':'ho: (tra: 1 la: 2) \n hi: (tra: 1 la: 2) \n ha: (tra: 1 la: 2)'}]
df = pd.DataFrame(inp)
df

给予

    long string
0 ha: (tra: 1 la: 2) \n hi: (tra: 1 la: 2) \n ho...
1 hi: (tra: 1 la: 2) \n ha: (tra: 1 la: 2) \n ho...
2 ho: (tra: 1 la: 2) \n hi: (tra: 1 la: 2) \n ha...

我想要什么

inp = {'ha-tra':['1', '1', '1'], 'ha-la':['2', '2', '2'], 'hi-tra':['1', '1', '1'], 'hi-la':['2', '2', '2'],'ho-tra':['1', '1', '1'], 'ho-la':['2', '2', '2']}
df = pd.DataFrame(inp)
df

给予

    ha-tra  ha-la   hi-tra  hi-la   ho-tra  ho-la
0 1 2 1 2 1 2
1 1 2 1 2 1 2
2 1 2 1 2 1 2

上下文

从一个大字符串中,我想获取 (ha hi ho) 和 (tra la) 的每个组合,并从字符串中获取与这些组合相关的分数。问题是 (ha hi ho) 的顺序不相似。

最佳答案

ndf = (df["long string"]
.str.extractall(r"(ha|hi|ho):\s\((?:tra|la):\s(\d+)\s(?:tra|la):\s(\d+)\)")
.droplevel("match")
.set_index(0, append=True)
.set_axis(["tra", "la"], axis=1)
.unstack()
.swaplevel(axis=1))
ndf.columns = ndf.columns.map("-".join)
  • 使用regex提取所需的部分
  • 降低 extractall 引发的指数水平叫match
  • 附加 ha-hi-ho匹配为索引( 0 是第一个捕获组)
  • 重命名剩余列 trala
  • 拆开ha-hi-ho列索引
  • 交换 ha-hi-hotra-la级别在列中的顺序,以便 ha-hi-ho位于上方
  • 最后用连字符连接这些级别的列名称

获取

  ha-tra hi-tra ho-tra ha-la hi-la ho-la
0 1 1 1 2 2 2
1 1 1 1 2 2 2
2 1 1 1 2 2 2

关于python - 如何从数据框中的字符串创建列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67770056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com