替换特定行中的子字符串

问题描述 投票:0回答:1

对于以下DataFrame

my_cols = ["a", "b", "c"]       
df2 = pd.DataFrame([["1a", "2a", "3a"], ["4a", "5a", "6a"], ["7a", "8a", "9a"],
                    ["1a", "2a", "3a"], ["4a", "5a", "6a"], ["7a", "8a", "9a"]],
                   columns=my_cols)

df2:
    a   b   c
0  1a  2a  3a
1  4a  5a  6a
2  7a  8a  9a
3  1a  2a  3a
4  4a  5a  6a
5  7a  8a  9a

我想评估是否在任何行上的值为4a。在这种情况下,我想在整个行中重新按a

b
my_str = "4a"
for x in range(df2.shape[0]):
    if my_str in df2["a"][x]:
        for y in range(len(my_cols)):
            df2[my_cols[y]][x] = df2[my_cols[y]][x].replace("a","b")

df2:
    a   b   c
0  1a  2a  3a
1  4b  5b  6b
2  7a  8a  9a
3  1a  2a  3a
4  4b  5b  6b
5  7a  8a  9a

由于多个循环以及由replace()完成的分配,因此此方法似乎效率太低。有一些内置的方法可以完成这项工作吗?任何改进将不胜感激。

python pandas
1个回答
0
投票

[使用遮罩为至少出现4a的那些行上的数据帧建立索引,然后使用replace设置replace进行子字符串匹配,以将regex=True替换为a s:] >

b
m = df2.eq('4a').any(1)
df2[m] = df2[m].replace('a','b',regex=True)
© www.soinside.com 2019 - 2024. All rights reserved.