我有两个长度相同但列名不同的熊猫系列。如何在其中添加值?
series.add(other, fill_value=0, axis=0)
确实避免使用NaN
值,但未添加这些值。相反,结果是两个系列的串联。
有没有办法获得由两个序列中的值之和组成的新序列?
答案 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)