sol*_*lub 4 python join multi-index dataframe pandas
考虑以下单索引 DataFrame:
energy fat
1 2000 28
2 1900 17
3 2200 30
4 1750 15
5 1800 18
6 1600 12
Run Code Online (Sandbox Code Playgroud)
我还有一个多索引系列:
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
Run Code Online (Sandbox Code Playgroud)
我怎样才能将两者结合起来,结果如下所示:
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
Run Code Online (Sandbox Code Playgroud)
我尝试过df.join(series, how = 'inner'),但收到的只是以下错误消息:
"ValueError: cannot join with no level specified and no overlapping names"
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下我在这里做错了什么以及我如何实现两者的结合吗?谢谢 !
选项 1
我不建议将不应该存在的内容移至索引中。
也就是说,pd.DataFrame.join如果你的索引级别被适当命名,或者更确切地说它们匹配,那么你可以使用,这样 pandas 就知道要加入什么。
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
Run Code Online (Sandbox Code Playgroud)
多写几行以增加可读性
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
Run Code Online (Sandbox Code Playgroud)
选项 2
我们还可以pd.concat与locand 一起使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6079 次 |
| 最近记录: |