gpt4 book ai didi

python - 如何使用 pandas 创建新的 df 列以使用正则表达式获取列名和值?

转载 作者:行者123 更新时间:2023-11-28 16:57:35 24 4
gpt4 key购买 nike

我有这样的专栏:

**col_3**
MD01_TK336_AT000_PT01
MD01_TK336_AT000_PB250_PT03
MD01_TK336_AT025_PT01
MD01_TK336_AT000_TH005_PT01
MD01_TK336_AT000_SB250_PT01_BP04

在 Pandas df.请注意,不应忘记同一行中的其他列 - 它们彼此相关。我想创建更多 df 列以获得以下结果:

**MD  TK    AT  PT   PB   SB   TH  BP**
01 336 000 01
01 336 000 03 250
01 336 025 01
01 336 000 01 01
01 336 000 01 250 04

其中不存在的值只是空白或“”。

我试过使用:

df.col_3.str.extractall(r'([A-Za-z]+)(\d+)')

但它给出了类似于 groupby 结构的东西,并且拆栈它不会根据字符给出列名。

编辑:根据彼得的回答。

Starting with:

**col_2**
MD01_TK336_AT000_PT01
MD01_TK336_AT000_PT02

>>> col_2.str.extractall(r'([A-Za-z]+)(\d+)')

0 1
match
0 0 MD 01
1 TK 336
2 AT 000
3 PT 01
1 0 MD 01
1 TK 336
2 AT 000
3 PT 02

>>> col_2.str.extractall(r'([A-Za-z]+)(\d+)')
.reset_index(level=1, drop=True)

0 1
0 MD 01
0 TK 336
0 AT 000
0 PT 01
1 MD 01
1 TK 336
1 AT 000
1 PT 02

>>> col_2.str.extractall(r'([A-Za-z]+)(\d+)')
.reset_index(level=1, drop=True)
.set_index(0, append=True)

1
0
0 MD 01
TK 336
AT 000
PT 01
1 MD 01
TK 336
AT 000
PT 02

>>> col_2.str.extractall(r'([A-Za-z]+)(\d+)')
.reset_index(level=1, drop=True)
.set_index(0, append=True)
.unstack()

1
0 AT MD PB PT TK
0 000 01 NaN 01 336
1 000 01 NaN 02 336

最佳答案

基于您的尝试:

# Hard-code desired column order
cols = ['MD', 'TK', 'AT', 'PT', 'PB', 'SB', 'TH', 'BP']

res = (df.col_3
.str.extractall(r'([A-Za-z]+)(\d+)')
.reset_index(level=1, drop=True)
.set_index(0, append=True)
.unstack()
.fillna(0))

res.columns = res.columns.droplevel(None)

res = res[cols]
del res.columns.name

res

0 MD TK AT PT PB SB TH BP
0 01 336 000 01 0 0 0 0
1 01 336 000 03 250 0 0 0
2 01 336 025 01 0 0 0 0
3 01 336 000 01 0 0 005 0
4 01 336 000 01 0 250 0 04

关于python - 如何使用 pandas 创建新的 df 列以使用正则表达式获取列名和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942569/

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