python – 合并pandas DataFrames时如何保持列MultiIndex值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 合并pandas DataFrames时如何保持列MultiIndex值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2419字,纯文字阅读大概需要4分钟。
内容图文
我有两个pandas DataFrame,如下所示:
df1 = pd.DataFrame({('Q1', 'SubQ1'):[1, 2, 3], ('Q1', 'SubQ2'):[1, 2, 3], ('Q2', 'SubQ1'):[1, 2, 3]})
df1['ID'] = ['a', 'b', 'c']
df2 = pd.DataFrame({'item_id': ['a', 'b', 'c'], 'url':['a.com', 'blah.com', 'company.com']})
DF1:
Q1 Q2 ID
SubQ1 SubQ2 SubQ1
0 1 1 1 a
1 2 2 2 b
2 3 3 3 c
DF2:
item_id url
0 a a.com
1 b blah.com
2 c company.com
注意,df1有一些带有层次索引的列(例如(‘Q1′,’SubQ1’)),有些列只有正常的索引(例如ID).
我想在ID和item_id字段上合并这两个数据框.使用:
result = pd.merge(df1, df2, left_on='ID', right_on='item_id')
得到:
(Q1, SubQ1) (Q1, SubQ2) (Q2, SubQ1) (ID, ) item_id url
0 1 1 1 a a a.com
1 2 2 2 b b blah.com
2 3 3 3 c c company.com
正如您所看到的,合并本身工作正常,但MultiIndex已丢失并已恢复为元组.我尝试使用pd.MultiIndex.from_tuples重新创建MultiIndex,如下所示:
result.columns = pd.MultiIndex.from_tuples(result)
但这会导致item_id和url列出现问题,只取其名称的前两个字符:
Q1 Q2 ID i u
SubQ1 SubQ2 SubQ1 t r
0 1 1 1 a a a.com
1 2 2 2 b b blah.com
2 3 3 3 c c company.com
将df2中的列转换为单元素元组(即.(‘item_id’,)而不仅仅是’item_id’)没有区别.
如何合并这两个DataFrame并正确保持MultiIndex?或者,我如何获取合并的结果并返回具有适当MultiIndex的列而不会弄清楚item_id和url列的名称?
解决方法:
如果你无法击败他们,请加入他们. (在合并之前,使两个DataFrames具有相同数量的索引级别):
import pandas as pd
df1 = pd.DataFrame({('Q1', 'SubQ1'):[1, 2, 3], ('Q1', 'SubQ2'):[1, 2, 3], ('Q2', 'SubQ1'):[1, 2, 3]})
df1['ID'] = ['a', 'b', 'c']
df2 = pd.DataFrame({'item_id': ['a', 'b', 'c'], 'url':['a.com', 'blah.com', 'company.com']})
df2.columns = pd.MultiIndex.from_product([df2.columns, ['']])
result = pd.merge(df1, df2, left_on='ID', right_on='item_id')
print(result)
产量
Q1 Q2 ID item_id url
SubQ1 SubQ2 SubQ1
0 1 1 1 a a a.com
1 2 2 2 b b blah.com
2 3 3 3 c c company.com
这也避免了UserWarning:
pandas/core/reshape/merge.py:551: UserWarning: merging between different levels can give an unintended result (2 levels on the left, 1 on the right)
内容总结
以上是互联网集市为您收集整理的python – 合并pandas DataFrames时如何保持列MultiIndex值全部内容,希望文章能够帮你解决python – 合并pandas DataFrames时如何保持列MultiIndex值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。