如何合并两个pandas Series?含重叠与无重叠索引场景
Pandas Series 合并解决方案
场景1:存在重叠索引且对应值一致的合并
原始数据代码
import pandas as pd index1 = list(range(6)) index2 = list(range(2, 8)) data1 = [7, 6, 1, 9, 3, 4] data2 = [1, 9, 3, 4, 10, 12] s1 = pd.Series(data=data1, index=index1) s2 = pd.Series(data=data2, index=index2)
需求
合并s1和s2得到新Series s3,保留s1的全部内容,同时补充s2中s1没有的索引对应值(重叠索引处值一致,无需处理冲突),最终输出如下:
0 7 1 6 2 1 3 9 4 3 5 4 6 10 7 12
解决方法
使用combine_first方法,该方法会优先使用调用者(s1)的值,当调用者索引缺失时,补充传入Series(s2)对应的值,完美适配重叠索引值一致的场景:
s3 = s1.combine_first(s2) print(s3)
也可以用pd.concat结合分组去重,效果相同:
s3 = pd.concat([s1, s2]).groupby(level=0).first() print(s3)
场景2:无重叠索引的合并
原始数据代码
import pandas as pd index1 = list(range(6)) index2 = list(range(8, 14)) data1 = [7, 6, 1, 9, 3, 4] data2 = [7, 2, 5, 6, 10, 12] s1 = pd.Series(data=data1, index=index1) s2 = pd.Series(data=data2, index=index2)
需求
合并s1和s2得到新Series s3,保留两个Series的全部内容,按原Series的顺序排列(先s1后s2),最终输出如下:
0 7 1 6 2 1 3 9 4 3 5 4 8 7 9 2 10 5 11 6 12 10 13 12 dtype: int64
解决方法
直接使用pd.concat,设置sort=False以保持原Series的索引顺序(默认sort=True会对索引进行排序):
s3 = pd.concat([s1, s2], sort=False) print(s3)
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

