将 2 个系列的索引混合到 1 个数据框中

blending the indexes from 2 series into 1 dataframe

所以我从这两个列表开始:

import pandas as pd

cat = [4, 5, 5, 6, 7, 4]
dog = [4, 5, 5, 6, 7, 4]

我将它们转换为 pd.Series:

cat = pd.Series(cat, index = ['1', '2', '3', '4', '5', '6'])
dog = pd.Series(dog, index = ['a', 'b', 'c', 'd', 'e', 'f'])

然后使用它们创建一个 DataFrame:

animals = pd.DataFrame([cat, dog], index = ['cat', 'dog']).transpose()

生成以下 DataFrame:

    cat dog
1   4.0 NaN
2   5.0 NaN
3   5.0 NaN
4   6.0 NaN
5   7.0 NaN
6   4.0 NaN
a   NaN 4.0
b   NaN 5.0
c   NaN 5.0
d   NaN 6.0
e   NaN 7.0
f   NaN 4.0

我的问题是:如何混合 2 个系列,以便 DataFrame 使用公共索引,而不是从系列中获取的唯一索引?

输出应如下所示:

    cat dog
r   4.0 4.0
f   5.0 5.0
v   5.0 5.0
d   6.0 6.0
a   7.0 7.0
h   4.0 4.0

好的,您面临的是内在数据对齐,其中 pandas 对齐大部分基于数据帧索引(包括列 headers)的所有操作。获得所需输出的一种方法是匹配索引。

cat = [4, 5, 5, 6, 7, 4]
dog = [4, 5, 5, 6, 7, 4]
cat = pd.Series(cat, index = ['1', '2', '3', '4', '5', '6']).rename('cat')
dog = pd.Series(dog, index = ['a', 'b', 'c', 'd', 'e', 'f']).rename('dog')

cat_c = cat.rename(index={c:d for c, d in zip(cat.index,dog.index)})
pd.concat([cat_c, dog], axis=1)

输出:

|    |   cat |   dog |
|----|-------|-------|
| a  |     4 |     4 |
| b  |     5 |     5 |
| c  |     5 |     5 |
| d  |     6 |     6 |
| e  |     7 |     7 |
| f  |     4 |     4 |