Pandas 。 假设我有这个 DataFrame: df = pd.DataFrame(["BULL AP-6ren">
gpt4 book ai didi

python - Pandas :如果 A 列包含 "y",则有条件地将子字符串 +"z" "x"附加到 B 列

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:48 25 4
gpt4 key购买 nike

我试图弄清楚如何根据 regexA 中的 列有条件地将每行的子字符串添加到 B 列> Pandas

假设我有这个 DataFrame:

df = pd.DataFrame(["BULL APPLE X2","BEAR APPLE X3","BULL GOOG 2X", 
"BEAR GOOG 3X", "BULL TSLA", "BEAR TSLA"], columns=["A"])

期望的输出:

A                    B
"BULL APPLE X2" "+200"
"BEAR APPLE X3" "-300"
"BULL GOOG 2x" "+200"
"BEAR GOOG 3x" "-300"
"BULL TSLA" "+100"
"BEAR TSLA" "-100"

因此,如果 A 包含 "X2",则使用 regex 获取 "2" 并添加 "+"前,"00"后,写入B

如果不包含XnnX,则插入"1"

目前,我这样做是为了获取数字:

df["B"] = df["A"].str.extract(r"\sX(\d+)\s)", flags=re.IGNORECASE) 

(这仅适用于 Xn,不适用于 nX)。

由此,我必须将 "+""-""00" 添加到 B基于是否A 包含 BULLBEAR

最佳答案

如果你总是让 X 后跟一些数字:

 r = re.compile(r"X(\d)$")

df["B"] = df["A"].map(lambda x: "+"+r.search(x).group(1)+"00"
if "BULL" in x else "-"+r.search(x).group(1)+"00"if "BEAR" in x else "")

print(df)

A B
0 BULL APPLE X2 +200
1 BEAR APPLE X3 -300
2 BULL APPLE X4 +400

我有一个正则表达式解决方案,但它很丑陋,这取决于您的数据,然后拆分可能会完成这项工作:

def f1(x):
spl = x.rsplit(None, 1)[1].strip("Xx")
if spl.isdigit():
return "+" + spl + "00"
return "+100"

def f2(x):
spl = x.rsplit(None, 1)[1].strip("Xx")
if spl.isdigit():
return "-" + spl + "00"
return "-100"


df = pd.DataFrame(["BULL APPLE X2", "BEAR APPLE X3", "BULL GOOG 2X", "BEAR GOOG 3X", "BULL TSLA", "BEAR TSLA","FOO BAR"],
columns=["A"])


df["B"] = df["A"].map(lambda x: f1(x)
if "BULL" in x else f2(x) if "BEAR" in x else "+100")

print(df)

输出:

               A     B
0 BULL APPLE X2 +200
1 BEAR APPLE X3 -300
2 BULL GOOG 2X +200
3 BEAR GOOG 3X -300
4 BULL TSLA +100
5 BEAR TSLA -100
6 FOO BAR +100

除非你有其他由小写和大写 x 组成的单词,或者只是字符串末尾的数字,然后从字符串的末尾拆分一次并在剥离后检查我们是否有数字应该可以工作

关于python - Pandas :如果 A 列包含 "y",则有条件地将子字符串 +"z" "x"附加到 B 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30955065/

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