Pandas在数据帧的单个列上进行逻辑索引以分配值

时间:2015-06-18 19:15:53

标签: python r pandas dataframe

我是一名R程序员,正在寻找类似的方法在R中执行类似的操作:

data[data$x > value, y] <- 1

(基本上,取x列大于某个值的所有行,并在这些行中为y列指定值1)

在熊猫中,似乎等同于:

data['y'][data['x'] > value] = 1

但是这会给出一个SettingWithCopyWarning。

我尝试过的等效陈述是:

condition = data['x']>value
data.loc(condition,'x')=1

但我很困惑。也许我在R方面思考太多,无法理解Python中正在发生的事情。 在Python或变通方法中,这将是什么相同的代码?

1 个答案:

答案 0 :(得分:0)

你的陈述不正确应该是:

data.loc[condition, 'x'] = 1

示例:

In [3]:

df = pd.DataFrame({'a':np.random.randn(10)})
df
Out[3]:
          a
0 -0.063579
1 -1.039022
2 -0.011687
3  0.036160
4  0.195576
5 -0.921599
6  0.494899
7 -0.125701
8 -1.779029
9  1.216818
In [4]:

condition = df['a'] > 0
df.loc[condition, 'a'] = 20
df
Out[4]:
           a
0  -0.063579
1  -1.039022
2  -0.011687
3  20.000000
4  20.000000
5  -0.921599
6  20.000000
7  -0.125701
8  -1.779029

当你订阅df时,你应该使用方括号[]而不是括号()这是一个函数调用。请参阅docs