如何使用Pandas将多索引系列连接到单个索引数据框? [英] How to join a multi-index series to a single index dataframe with Pandas?
本文介绍了如何使用Pandas将多索引系列连接到单个索引数据框?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
考虑以下单个索引数据帧:
Consider the following single index DataFrame:
energy fat
1 2000 28
2 1900 17
3 2200 30
4 1750 15
5 1800 18
6 1600 12
我还有一个多重指数系列:
I also have a multindex Series:
1 vitamin-c 0.0004
vitamin-a 0.0150
2 vitamin-c 0.0030
3 vitamin-d 1.2000
vitamin-e 1.0007
vitamin-c 1.2020
4 vitamin-a 0.0780
5 vitamin-b 0.9650
6 vitamin-e 1.9801
vitamin-c 1.0011
如何我可以同时加入两者吗,结果如下所示:
How can I join the two so the result looks like this:
energy fat vitamins
1 2000 28 vitamin-c 0.0004
vitamin-a 0.0150
2 1900 17 vitamin-c 0.0030
3 2200 30 vitamin-d 1.2000
vitamin-e 1.0007
vitamin-c 1.2020
4 1750 15 vitamin-a 0.0780
5 1800 18 vitamin-b 0.9650
6 1600 12 vitamin-e 1.9801
vitamin-c 1.0011
我尝试了 df.join(series,how ='inner' )
,但我得到的只是以下错误消息:
I tried df.join(series, how = 'inner')
but all I got is the following error message:
"ValueError: cannot join with no level specified and no overlapping names"
有人可以解释一下我在这里做错了什么以及我如何实现两者的结合?谢谢!
Can someone please explain me what im doing wrong here and how i can achieve the combination of the two ? Thank you !
推荐答案
选项1
我不建议搬家
也就是说,如果您的索引级别已适当命名,则可以使用 pd.DataFrame.join
,
df.rename_axis('ord').join(s.rename_axis(['ord', 'vit']).rename('val'))
energy fat val
ord vit
1 vitamin-c 2000 28 0.0004
vitamin-a 2000 28 0.0150
2 vitamin-c 1900 17 0.0030
3 vitamin-d 2200 30 1.2000
vitamin-e 2200 30 1.0007
vitamin-c 2200 30 1.2020
4 vitamin-a 1750 15 0.0780
5 vitamin-b 1800 18 0.9650
6 vitamin-e 1600 12 1.9801
vitamin-c 1600 12 1.0011
多行以增加可读性
In a couple more lines to add readability
s = s.rename_axis(['ord', 'vit']).rename('val')
df = df.rename_axis('ord')
df.join(s)
energy fat val
ord vit
1 vitamin-c 2000 28 0.0004
vitamin-a 2000 28 0.0150
2 vitamin-c 1900 17 0.0030
3 vitamin-d 2200 30 1.2000
vitamin-e 2200 30 1.0007
vitamin-c 2200 30 1.2020
4 vitamin-a 1750 15 0.0780
5 vitamin-b 1800 18 0.9650
6 vitamin-e 1600 12 1.9801
vitamin-c 1600 12 1.0011
选项2
我们还可以将 pd.concat
与 loc
和 pd.Index一起使用。 get_level_values
pd.concat(
[df.loc[s.index.get_level_values(0)].set_index(s.index), s.rename('val')],
axis=1
)
energy fat val
1 vitamin-c 2000 28 0.0004
vitamin-a 2000 28 0.0150
2 vitamin-c 1900 17 0.0030
3 vitamin-d 2200 30 1.2000
vitamin-e 2200 30 1.0007
vitamin-c 2200 30 1.2020
4 vitamin-a 1750 15 0.0780
5 vitamin-b 1800 18 0.9650
6 vitamin-e 1600 12 1.9801
vitamin-c 1600 12 1.0011
这篇关于如何使用Pandas将多索引系列连接到单个索引数据框?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文