按布尔表达式索引行,按位置熊猫数据框索引

时间:2020-03-31 20:01:11

标签: python pandas dataframe

如何设置熊猫数据帧切片的值,其中的行由布尔表达式选择,而列则由位置选择?

到目前为止,我已经通过以下方式做到了:

>>> vals = [5,7]
>>> df = pd.DataFrame({'a':[1,2,3,4], 'b':[5,5,7,7]})
>>> df
   a  b
0  1  5
1  2  5
2  3  7
3  4  7
>>> df.iloc[:,1][df.iloc[:,1] == vals[0]] = 0
>>> df
   a  b
0  1  0
1  2  0
2  3  7
3  4  7

这在这个小样本上可以正常工作,但是在我的真实数据帧上给了我以下警告:

SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

推荐的实现方法是什么?

2 个答案:

答案 0 :(得分:2)

使用DataFrame.columnsDataFrame.loc

col = df.columns[1]
df.loc[df.loc[:,col] == vals[0], col] = 0

答案 1 :(得分:1)

一种方法是使用列标题和loc(基于标签的索引)的索引:

df.loc[df.iloc[:, 1] == vals[0], df.columns[1]] = 0

另一种方法是将np.whereiloc(整数位置索引)一起使用,np.where返回行,列索引位置的元组,其中True:

df.iloc[np.where(df.iloc[:, 1] == vals[0])[0], 1] = 0