【问题标题】:Populating pandas dataframe based on indexes between two values根据两个值之间的索引填充熊猫数据框
【发布时间】:2017-06-26 15:48:18
【问题描述】:

我正在尝试生成一个用于广播到数据帧中的掩码:一个布尔系列,指示给定行是否在两个值之间。这对于单个逻辑语句很容易做到,比如数据框中的最后五个元素:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10,1))
mask = (df.index.values>4)
df.loc[mask,'column'] = range(0,5)

但是如何用更多的交叉语句做同样的事情呢?例如,代替数组中的最后五个组件,我可以寻址第 2 行到第 6 行吗?尝试对掩码使用 AND 语句失败,并且我不能在数据帧索引值上使用 Between。

【问题讨论】:

    标签: python pandas dataframe between


    【解决方案1】:

    我认为你可以使用mask,主要是在重复索引值的情况下。

    所以如果想使用between 仅与系列一起使用,可以使用to_seriesSeries 构造函数。

    mask = df.index.to_series().between(2,6)
    #mask = pd.Series(df.index, index=df.index).between(2,6)
    print (mask)
    0    False
    1    False
    2     True
    3     True
    4     True
    5     True
    6     True
    7    False
    8    False
    9    False
    dtype: bool
    
    mask = df.index.to_series().between(2,6).values
    print (mask)
    [False False  True  True  True  True  True False False False]
    

    或者用&链接条件:

    mask = (df.index >= 2) & (df.index <= 6)
    print (mask)
    [False False  True  True  True  True  True False False False]
    

    但如果是唯一单调索引,最好使用loc

    df.loc[2:6, 0] = range(5)
    print (df)
              0
    0  0.642933
    1  0.912846
    2  0.000000
    3  1.000000
    4  2.000000
    5  3.000000
    6  4.000000
    7  0.504830
    8  0.000422
    9  0.029358
    

    【讨论】:

      猜你喜欢
      • 2015-08-09
      • 2020-01-19
      • 2021-04-02
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      相关资源
      最近更新 更多