【问题标题】:Pandas logical indexing on a single column of a dataframe to assign valuesPandas 对数据框的单个列进行逻辑索引以分配值
【发布时间】:2015-09-04 14:16:46
【问题描述】:

我是一名 R 程序员,正在寻找类似的方式在 R 中做类似的事情:

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

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

在 pandas 中,等价物似乎是这样的:

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

但这给出了一个 SettingWithCopyWarning。

我尝试过的等效语句是:

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

但我很困惑。也许我在 R 方面想得太多,无法理解 Python 中发生的事情。 Python 中的等效代码或解决方法是什么?

【问题讨论】:

    标签: python r pandas dataframe


    【解决方案1】:

    你的说法不正确应该是:

    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

    【讨论】:

      猜你喜欢
      • 2015-06-06
      • 2016-02-19
      • 2016-11-14
      • 2018-03-12
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多