将两个具有不同列名称的Pandas系列的值相加

时间:2018-11-23 20:12:05

标签: python pandas indexing series

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

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

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

2 个答案:

答案 0 :(得分:1)

通过values属性,您可以访问基础的原始numpy数组。您可以添加这些。

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

这也有效:

series2 = series + other.values

答案 1 :(得分:1)

产业不匹配

此问题是您的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)