Pandas基于索引交集多个系列

3
我有一个包含10个 pandas.core.series.Series 的列表,每个系列都有一个索引和一个值。
我想要将这10个列表中的 pandas.core.series.Series 进行交集操作,以获取一个新的 DataFrame。该 DataFrame 应具有共同索引作为新索引的所有值,并且应该有10列,对应于原始列表中元素的值。
是否有一种 pythonic 的方法来执行此操作,而不是多次使用系列交集?

1
请提供一个样本和所需的数据集... - MaxU - stand with Ukraine
2个回答

3
考虑系列列表 los
los = [
    pd.Series([1, 2, 3], [0, 2, 4], name='A'),
    pd.Series([1, 2, 3], [1, 2, 4], name='B'),
    pd.Series([1, 2, 3], [4, 3, 2], name='C')
]

使用pd.concat函数并添加参数join='inner'
参数'inner'用于获取索引的交集

pd.concat(los, axis=1, join='inner')

   A  B  C
4  3  3  1
2  2  2  3

如果我们没有使用join='inner'

pd.concat(los, axis=1)

     A    B    C
0  1.0  NaN  NaN
1  NaN  1.0  NaN
2  2.0  2.0  3.0
3  NaN  NaN  2.0
4  3.0  3.0  1.0

这并不是交集。


1
命令pd.concat是专门为此设计的。请注意,在我的示例中,索引都相同,但pd.concat将自动交集索引。
## generate data
series_list = [pd.Series(np.random.randn(10)) for x in range(10)]

## output example
In [13]: pd.concat(series_list, axis=1)
Out[13]:
          0         1         2         3         4         5         6  \
0  0.859256 -2.283672  0.539067 -0.745864 -2.658162  0.353576  0.482614
1  0.999823  0.155528 -0.579598  0.356863 -0.135860 -0.406351  0.888127
2 -0.727666 -1.571515  0.639486  0.394803  0.478038  0.244531 -1.422910
3  0.582662  1.469884 -3.337026 -0.407253 -2.351327 -0.676233  0.018020
4  1.173179  0.211506 -0.360274 -0.299976 -0.479131  1.735279  0.549555
5 -1.589117 -2.037131 -1.843098  0.066606  0.166258 -1.444472  1.534016
6 -0.275819 -0.978669  2.299632  0.807746 -1.358762  1.190374 -0.668204
7  0.933350 -0.536032  1.285759  0.677269 -0.385078 -0.357661  2.085237
8  0.167977  0.090950  1.220945  1.085571 -0.486978  0.848816 -0.559023
9 -1.006001 -0.168631  1.501675 -0.351409  1.719402  0.337982 -0.776788

          7         8         9
0  0.015773  2.356775 -1.288013
1  1.292615  1.272147  0.347335
2  1.410002 -0.364822 -0.372589
3 -2.306940 -0.816853  2.565389
4 -1.815764 -1.547376  1.104517
5 -1.561681 -0.373882  0.582264
6 -1.272563 -0.317298 -0.446855
7  1.179011 -1.402293  0.424124
8 -1.839095  1.278204 -1.166991
9  0.950620  0.681596 -1.908053

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接