gpt4 book ai didi

python - 如果第二列与给定的 Pandas 列表匹配,则替换数据框列中的值

转载 作者:行者123 更新时间:2023-12-01 08:47:43 24 4
gpt4 key购买 nike

我有以下数据框

      col1          col2
0 str9 val1
1 str8 val2
2 str4 val3
3 str2 val4
4 unknown1 asdvstr1df
5 random1 teststr2test

以及以下列表

strings = ['str1', 'str2', 'str3', 'str4']

如果在第二列的字符串中的任何点与给定的列表字符串匹配,我想替换第一列中的值。

注意:col2 可以在字符串中包含列表“字符串”的值,也可以在任何一端。

目前我正在使用丑陋且缓慢的嵌套循环来执行此操作:

import pandas as pd

data_file = pd.DataFrame(data = ([['str9', 'val1'], ['str8', 'val2'], ['str4','val3'] , ['str2', 'val4'] , ['unknown', 'asdvstr1df'] , ['unknown', 'teststr2test']] ), columns = (['col1', 'col2']), dtype = str)
strings = ['str1', 'str2', 'str3', 'str4']

for value in range(data_file.shape[0]):
for text in strings:
if (str(data_file.col2[value]).find(text) != -1):
data_file.loc[value, 'col1'] = text

我不确定如何改进这个缓慢的过程。我怎样才能使它运行得比当前的 O(nm) 时间更快(n 是 data_file 的大小,m 是称为字符串的列表的大小)?

输出应该是:

   col1          col2
0 str9 val1
1 str8 val2
2 str4 val3
3 str2 val4
4 str1 asdvstr1df
5 str2 teststr2test

最佳答案

IIUC,

x = '(' + '|'.join(strings)+ ')'
df.assign(col1 = df.col2.str.extract(x, expand=False).combine_first(df.col1))

输出:

   col1          col2
0 str9 val1
1 str8 val2
2 str4 val3
3 str2 val4
4 str1 asdvstr1df
5 str2 teststr2test

关于python - 如果第二列与给定的 Pandas 列表匹配,则替换数据框列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49902412/

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