【发布时间】:2019-04-26 09:46:14
【问题描述】:
我有两个长度相同但列名不同的熊猫系列。如何在其中添加值?
series.add(other, fill_value=0, axis=0) 确实避免了NaN-values,但没有添加这些值。相反,结果是两个系列的串联。
有没有办法获得一个由两个系列中的值之和组成的新系列?
【问题讨论】:
标签: python pandas indexing series
我有两个长度相同但列名不同的熊猫系列。如何在其中添加值?
series.add(other, fill_value=0, axis=0) 确实避免了NaN-values,但没有添加这些值。相反,结果是两个系列的串联。
有没有办法获得一个由两个系列中的值之和组成的新系列?
【问题讨论】:
标签: python pandas indexing series
values 属性允许您访问底层的原始 numpy 数组。您可以添加这些。
raw_sum = series.values + other.values
series2 = Series(raw_sum, index=series.index)
这也有效:
series2 = series + other.values
【讨论】:
这个问题是你的 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)
【讨论】: