【问题标题】:Adding values of two Pandas series with different column names添加具有不同列名的两个 Pandas 系列的值
【发布时间】:2019-04-26 09:46:14
【问题描述】:

我有两个长度相同但列名不同的熊猫系列。如何在其中添加值?

series.add(other, fill_value=0, axis=0) 确实避免了NaN-values,但没有添加这些值。相反,结果是两个系列的串联。

有没有办法获得一个由两个系列中的值之和组成的新系列?

【问题讨论】:

    标签: python pandas indexing series


    【解决方案1】:

    values 属性允许您访问底层的原始 numpy 数组。您可以添加这些。

    raw_sum = series.values + other.values
    series2 = Series(raw_sum, index=series.index)
    

    这也有效:

    series2 = series + other.values
    

    【讨论】:

    • 值得注意的是,一般索引是有意义的,即使它们只是归结为“行号”。如果您的 2 个系列意味着要添加,但您的索引不匹配,则值得找出原因。
    【解决方案2】:

    不匹配的索引

    这个问题是你的 2 个系列有不同的索引。这是一个例子:

    s1 = pd.Series([1, np.nan, 3, np.nan, 5], index=np.arange(5))
    s2 = pd.Series([np.nan, 7, 8, np.nan, np.nan], index=np.arange(5)+10)
    
    print(s1.add(s2, fill_value=0, axis=0))
    
    0     1.0
    1     NaN
    2     3.0
    3     NaN
    4     5.0
    10    NaN
    11    7.0
    12    8.0
    13    NaN
    14    NaN
    dtype: float64
    

    您有 2 个选项:例如通过字典重新索引或忽略索引并按位置添加您的系列。

    一个系列的地图索引与另一个对齐

    您可以使用字典重新对齐。下面的映射是任意的。 NaN 值出现在重新索引后,两个系列中的值都是 NaN

    index_map = dict(zip(np.arange(5) + 10, [3, 2, 4, 0, 1]))
    s2.index = s2.index.map(index_map)
    
    print(s1.add(s2, fill_value=0, axis=0))
    
    0     1.0
    1     NaN
    2    10.0
    3     NaN
    4    13.0
    dtype: float64
    

    忽略索引;仅使用定位位置

    在这种情况下,您可以使用常规pd.RangeIndex 作为索引(即0, 1, 2, ...)构建一个新系列,或者使用来自输入系列之一的索引:

    # normalized index
    res = pd.Series(s1.values + s2.values)
    
    # take index from s1
    res = pd.Series(s1.values + s2.values, index=s1.index)
    

    【讨论】:

    • 感谢您提供详细的解决方案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2021-02-24
    相关资源
    最近更新 更多