gpt4 book ai didi

python - 在 Pandas 中创建 bool 列的更快方法

转载 作者:太空宇宙 更新时间:2023-11-03 15:29:42 25 4
gpt4 key购买 nike

我正在根据其他列是否包含某些字符串值来创建新的 bool 列。

这是我尝试过的

def function(data):
data["col1"] = 0
data["col2"] = 0
data["col3"] = 0
for i in range(0,len(data)):
if ("cond1" in data.loc[i,"old_col1"].lower()) or ("cond2" in data.loc[i,"old_col1"].lower()):
data.loc[i,"col1"] = 1
elif ("cond3 " in data.loc[i,"old_col1"].lower()) or ("cond4 " in data.loc[i,"old_col2"].lower()):
data.loc[i,"col2"] = 1
elif ("cond5 " in in data.loc[i,"old_col1"].lower()) or ("cond6 " in data.loc[i,"old_col3"].lower()):
data.loc[i, "col3"] = 1

function(data)

但它不能很好地扩展到更大的数据集。

是否有更好的方法来实现 bool 列 col1-3,从而执行速度更快?

最佳答案

所有数据上的简单 str.contains

我制作了一个示例数据框,因为您没有提供

  col1       col2        col3
0 foo cucumber HogsWatch
1 bar selery hogswatch
2 baz Porcupine Watch Hogs

您可以使用 apply 来获取在整个数据帧上工作的函数

df.apply(lambda x: x.str.contains('A', flags=re.IGNORECASE))

col1 col2 col3
0 False False True
1 True False True
2 True False True

合并回来

这意味着您可以使用 bool 列生成一个新的数据框,如果需要,您可以将其连接到原始数据框中

bool_df = df.apply(lambda x: x.str.contains('A', flags=re.IGNORECASE))
df = df.merge(bool_df, left_index=True, right_index=True, suffixes=['', '_bool'])

col1 col2 col3 col1_bool col2_bool col3_bool
0 foo cucumber HogsWatch False False True
1 bar selery hogswatch True False True
2 baz Porcupine Watch Hogs True False True

多个条件

当然你可以在str.contains中制作更复杂的正则表达式,比如

df.apply(lambda x: x.str.contains('A|O', flags=re.IGNORECASE))

col1 col2 col3
0 True False True
1 True False True
2 True True True

单独的条件

我注意到每列都有不同的条件,用这种方法也可以实现,但它有点复杂,但仍然很快。

首先我们创建一个包含所有实际匹配字符串的数据框

conditions = {"col1": ["ar", "f"], "col2": ["er", "c"], "col3": ["Hog", " "]}
for col_name, strings in conditions:
regex = "(" + ")|(".join(strings) + ")"
df_cond = df[col_name].str.extract(regex, flags=re.IGNORECASE).notnull()
df[col_name + '_matches'] = df_cond.T.max().T

产品

  col1       col2        col3 col1_matches col2_matches col3_matches
0 foo cucumber HogsWatch True True True
1 bar selery hogswatch True True True
2 baz Porcupine Watch Hogs True False True

关于python - 在 Pandas 中创建 bool 列的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42982755/

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