代码之家  ›  专栏  ›  技术社区  ›  Felix

熊猫系列名录索引

  •  1
  • Felix  · 技术社区  · 7 年前

    我有一个熊猫系列的物品清单 obj 以及索引列表 idx . 我想要的是一个新的系列 out 每排 国际直拨电话 包含的值 obj[idx] 如果 国际直拨电话 不是 255 -1 否则。

    下面的代码实现了我想要实现的目标,但我想知道是否有更好的方法来实现这一点,特别是不需要首先创建一个Python列表,然后将其转换为pandas系列的开销。

    >>> import pandas as pd
    >>> obj = [pd.Series([1, 2, 3]), pd.Series([4, 5, 6]), pd.Series([7, 8, 9])]
    >>> idx = pd.Series([0, 255, 2])
    >>> out = pd.Series([obj[idx[row]][row] if idx[row] != 255 else -1 for row in range(len(idx))])
    >>> out
    0    1
    1   -1
    2    9
    dtype: int64
    >>>
    

    提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  2
  •   BENY    7 年前

    使用 reindex + lookup

    pd.Series(pd.concat(obj,1).reindex(idx).lookup(idx,idx.index)).fillna(-1)
    Out[822]: 
    0    1.0
    1   -1.0
    2    9.0
    dtype: float64