微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pandas-基于A列中的值相应地填充B列中的值而无需迭代for循环

如何解决pandas-基于A列中的值相应地填充B列中的值而无需迭代for循环

你可以使用np.where

import numpy as np

df['columnB'] = np.where(df['columnA'].str.endswith('---'), df['columnA'].str.slice(11,13), df['columnA'].str.slice(-3))
print(df)

             columnA columnB
0   DD22HAHTL1NXX---      XX
1   DD22HATNT1N--D3F     D3F
2   DD22HATNT1N--B3F     B3F
3   DD22HAHTL1N--A3F     A3F
4   DD22HATNT1N--C1F     C1F
5   DD22HAHTL1N--A3F     A3F
6   DD22HATNT1N--B3F     B3F
7   DD22HAHTL1N--A3F     A3F
8   DD22HAHTL1N--A3E     A3E
9   DD22HAHTL1N--A3F     A3F
10  DD22HAHTL1N--B3F     B3F
11  DD22HAHTL1N--A3F     A3F
12  DD22HAHTL1N--A3F     A3F
13  DD22HAHTL1NZZ---      ZZ
14  DD22HAHTL1N--A3E     A3E

解决方法

是我的问题陈述-

我有 columnA 的数据集,如

import pandas as pd
df = pd.DataFrame({
    'columnA': ['DD22HAHTL1NXX---','DD22HATNT1N--D3F','DD22HATNT1N--B3F','DD22HAHTL1N--A3F','DD22HATNT1N--C1F','DD22HAHTL1N--A3E','DD22HAHTL1N--B3F','DD22HAHTL1NZZ---','DD22HAHTL1N--A3E']})

我正在尝试使用 columnA 的子字符串创建一个新的 columnB 但有一个问题。条件是,

如果每行的最后 3 个字符是 — 那么我需要提取 XX ,即第 12 个和第 13 个字符并将其添加到新的 columnB 中,否则我需要捕获最后 3 个字符并将它们添加到 columnB 。我想要的输出将如下所示 -

输出

如何在不使用任何循环的情况下有效地创建这个新的 columnB?

我试过这个并且只为我工作了1个案例:

df['columnB'] = df.columnA.str[-3:]
df[columnB] = df.['columnA'].str.extract('([A-Za,z]{2}---)',expand=True) 

这给了我所有不以 ‘—‘ 结尾但以 ‘—‘ 结尾的列的最后 3 个字符,我知道这是错误的。我也尝试了 str.extract 与正则表达式,但它给了我所有以’—‘结尾的行的正确值,但不是其他行。请帮忙。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。