对于以下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()
完成的分配,因此此方法似乎效率太低。有一些内置的方法可以完成这项工作吗?任何改进将不胜感激。
[使用遮罩为至少出现4a
的那些行上的数据帧建立索引,然后使用replace
设置replace
进行子字符串匹配,以将regex=True
替换为a
s:] >
b
m = df2.eq('4a').any(1) df2[m] = df2[m].replace('a','b',regex=True)