pandas 如何从不包含特定字符的另一列中获取前n个字符

ct2axkht  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(153)

我有一个数据框
| 识别码|产品名称|
| - -|- -|
| 1BJM 10型|1BJM10_RS2022_PK产品包|
| | 批号_RS2022_PK|
| | 2 PKL 10_RS 2022_ Package 盒|
| | 3BDG10_RS2022_PK Package 盒|
| 1BJM 10型|1BJM10_RS2022_PK产品型号|
我想要的输出是这样的
| 识别码|产品名称|
| - -|- -|
| 1BJM 10型|1BJM10_RS2022_PK产品型号|
| - |批号_RS2022_PK|
| 2件装10个|2 PKL 10_RS 2022_ Package 盒|
| 3BDG 10型|3BDG10_RS2022_PK Package 盒|
| 1BJM 10型|1BJM10_RS2022_PK产品型号|
第二行不应获取ID,因为产品名称的前6个字符中包含“_”。
我试过这个密码,但它不工作

df.loc[df['ID'].isna()] = df['ID'].fillna(~df['product name'].str[:6].contains("_"))
fzsnzjdm

fzsnzjdm1#

通过&将两个条件链接起来,以便按位使用SeriesAND

s = df['product name'].str[:6]
df.loc[df['ID'].isna() & ~s.str.contains("_"), 'ID'] = s
print (df)
       ID      product name
0  1BJM10  1BJM10_RS2022_PK
1     NaN       L_RS2022_PK
2  2PKL10  2PKL10_RS2022_PK
3  3BDG10  3BDG10_RS2022_PK
4  1BJM10  1BJM10_RS2022_PK
wn9m85ua

wn9m85ua2#

试试看:

df['ID'] = df['product name'].apply(lambda x: x[:x.find('_')] if x.find('_')>=6 else '')

相关问题