我有以下代码,其中数据帧d有两列,其中col1为字符串值,col2为int值。
我想找到与模式匹配的所有行(使用contains),然后将相应行的col2值增加1。在我的代码的最后一行,我试图增加一个,我得到以下错误:
SettingWithCopyWarning:尝试在a的副本上设置值 从DataFrame切片。尝试使用.loc [row_indexer,col_indexer] = 值而不是请参阅文档中的警告: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self [name] = value
import pandas as pd
d = {'col1': ['abc', 'ave','abd', 'ave','abe', 'ave'], 'col2': [0,1,0,1,0,1]}
df = pd.DataFrame(data=d)
#print(df[df.col1.str.contains("ab")])
df[df.col1.str.contains("ab")].col2 +=1
如何使用向量操作递增值。我试图避免循环。
答案 0 :(得分:3)
为了好玩: - )
pd.to_numeric(df.col1.replace({'ab':1},regex=True),errors='coerce').fillna(0)+df.col2
Out[16]:
0 1.0
1 1.0
2 1.0
3 1.0
4 1.0
5 1.0
dtype: float64
答案 1 :(得分:2)
让这个:
df['col2'] = df.col1.str.contains('ab').astype(int) + df.col2
或
df['col2'] += df.col1.str.contains('ab').mul(1)
输出:
col1 col2
0 abc 1
1 ave 1
2 abd 1
3 ave 1
4 abe 1
5 ave 1