提取值的末尾并将其放置在基于特定条件的新列中

Lyn*_*ynn 1 python numpy pandas

我有一个数据框 df,我想在其中提取值的结尾并将其用作新列的决定因素

数据

id  type
a   h_db-nd
a   h_db-nd
a   h_bu
Run Code Online (Sandbox Code Playgroud)

想要的

id  type       status
a   h_db-nd    nd
a   h_db-nd    nd
a   h_bu       d
Run Code Online (Sandbox Code Playgroud)

如果结尾是 nd 将 nd 放在新列中的旁边,如果不是,则默认为 'd'

正在做

df['status'] = df['type'].str.extract()
Run Code Online (Sandbox Code Playgroud)

我正在执行提取,但仍在对此进行故障排除。任何建议表示赞赏

Mic*_*ado 6

您可以将条件pandas.Series.str.endswith与 一起使用numpy.where

df['status'] = np.where(df['type'].str.endswith("-nd"), "nd", "d")
Run Code Online (Sandbox Code Playgroud)


Jan*_*Jan 6

你可以用

import pandas as pd, re

dct = {"id": ["a", "a", "a"],
       "type": ["h_db-nd", "h_db-nd", "h_bu"]}

df = pd.DataFrame(dct)

df['status'] = df['type'].str.extract('-([^-]+)$').fillna('d')

print(df)
Run Code Online (Sandbox Code Playgroud)

哪个产量

  id     type status
0  a  h_db-nd     nd
1  a  h_db-nd     nd
2  a     h_bu      d
Run Code Online (Sandbox Code Playgroud)

如果您拥有的不仅仅是d/-nd.
否则,请使用@Michael 的回答