Kan*_*hew 4 python concat series pandas
我明白我可以combine_first用来合并两个系列:
series1 = pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
series2 = pd.Series([1,2,3,4,5],index=['f','g','h','i','j'])
series3 = pd.Series([1,2,3,4,5],index=['k','l','m','n','o'])
Combine1 = series1.combine_first(series2)
print(Combine1
Run Code Online (Sandbox Code Playgroud)
输出:
a 1.0
b 2.0
c 3.0
d 4.0
e 5.0
f 1.0
g 2.0
h 3.0
i 4.0
j 5.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)
如果我需要合并3个或更多系列怎么办?
我理解使用以下代码:print(series1 + series2 + series3)yield:
a NaN
b NaN
c NaN
d NaN
e NaN
f NaN
...
dtype: float64
Run Code Online (Sandbox Code Playgroud)
我可以有效地合并多个系列而不需要combine_first多次使用吗?
谢谢
根据您的编辑,我相信您需要沿第一个轴连接,然后pd.concat沿着相同的轴.
# Setup
series_list = [
pd.Series(range(1, 6), index=list('abcde')),
pd.Series(range(1, 6), index=list('fghij')),
pd.Series(range(1, 6), index=list('klmno'))
]
Run Code Online (Sandbox Code Playgroud)
例A(不同指数)
pd.concat(series_list)
a 1
b 2
c 3
d 4
e 5
f 1
g 2
h 3
i 4
j 5
k 1
l 2
m 3
n 4
o 5
dtype: int64
Run Code Online (Sandbox Code Playgroud)
例B(重叠指数)
series_list = [
pd.Series(range(1, 6), index=list('abcde')),
pd.Series(range(1, 6), index=list('abcde')),
pd.Series(range(1, 6), index=list('kbmdf'))
]
Run Code Online (Sandbox Code Playgroud)
假设您使用 的行为combine_first按预期顺序对系列值进行优先级排序combine_first,您可以使用 lambda 表达式简洁地对其进行多次调用。
from functools import reduce
l_series = [series1, series2, series3]
reduce(lambda s1, s2: s1.combine_first(s2), l_series)
Run Code Online (Sandbox Code Playgroud)
当然,如果索引像当前示例中那样是唯一的,您可以简单地使用pd.concat。
演示
series1 = pd.Series(list(range(5)),index=['a','b','c','d','e'])
series2 = pd.Series(list(range(5, 10)),index=['a','g','h','i','j'])
series3 = pd.Series(list(range(10, 15)),index=['k','b','m','c','o'])
from functools import reduce
l_series = [series1, series2, series3]
print(reduce(lambda s1, s2: s1.combine_first(s2), l_series))
# a 0.0
# b 1.0
# c 2.0
# d 3.0
# e 4.0
# g 6.0
# h 7.0
# i 8.0
# j 9.0
# k 10.0
# m 12.0
# o 14.0
# dtype: float64
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4437 次 |
| 最近记录: |