Python 3.x 合并多列上的数据帧-有关级别的错误

Python 3.x 合并多列上的数据帧-有关级别的错误,python-3.x,pandas,Python 3.x,Pandas,我正在两个字段上合并下面的两个数据帧 successes = pd.merge(failures, successes, left_on=['name', 'project_name'], right_on=['name', 'project_name'], how='left') 但是我犯了这个错误,有人能帮我吗 /usr/local/lib/python3.8/site-packages/pandas/core/reshape/merge.py:643: UserWarning: merg

我正在两个字段上合并下面的两个数据帧

successes = pd.merge(failures, successes, left_on=['name', 'project_name'], right_on=['name', 'project_name'], how='left')
但是我犯了这个错误,有人能帮我吗

/usr/local/lib/python3.8/site-packages/pandas/core/reshape/merge.py:643: UserWarning: merging between different levels can give an unintended result (1 levels on the left,2 on the right)
  warnings.warn(msg, UserWarning)

我认为必须这样写:


成功。合并(失败,on=['name','project\u name'])

我认为必须这样写:


成功。合并(失败,在=['name','project\u name'])

当您将数据帧与不同级别的列索引合并时,会发生这种情况。 下面的人工示例再现了您的警告:

import pandas as pd
# a has 2 level column index
a = pd.DataFrame({("name_0","name_01"):[1,2,3,4],
                 ("name_0","name_02"):[4,3,2,1]})
# b has 1 level column index
b = pd.DataFrame({"name_0":[10,2,30,40],
                 "name_1":[40,30,20,10]})

# Notice how left_on accepts list of tuples. Tuples can be used to adress multilevel columns
pd.merge(a,b,how="left",left_on=[("name_0","name_01")],right_on=["name_0"])
如果在数据帧“a”中仅使用多级列索引的级别1,则此警告将消失:

import pandas as pd
a = pd.DataFrame({("name_0","name_01"):[1,2,3,4],
                 ("name_0","name_02"):[4,3,2,1]})

# Only use the 1st level index (e.g. "name_01" and "name_02")
a.columns = a.columns.get_level_values(1)

b = pd.DataFrame({"name_0":[10,2,30,40],
                 "name_1":[40,30,20,10]})    

# Notice how left_on is now a normal string since only 1 level is used
pd.merge(a,b,how="left",left_on=["name_01"],right_on=["name_0"])

我建议您检查两个数据帧是否具有相同的级别索引。如果不考虑删除一个级别或将它们夷为一个级别。

< P>这是在合并具有不同级别的列索引的数据文件时发生的。 下面的人工示例再现了您的警告:

import pandas as pd
# a has 2 level column index
a = pd.DataFrame({("name_0","name_01"):[1,2,3,4],
                 ("name_0","name_02"):[4,3,2,1]})
# b has 1 level column index
b = pd.DataFrame({"name_0":[10,2,30,40],
                 "name_1":[40,30,20,10]})

# Notice how left_on accepts list of tuples. Tuples can be used to adress multilevel columns
pd.merge(a,b,how="left",left_on=[("name_0","name_01")],right_on=["name_0"])
如果在数据帧“a”中仅使用多级列索引的级别1,则此警告将消失:

import pandas as pd
a = pd.DataFrame({("name_0","name_01"):[1,2,3,4],
                 ("name_0","name_02"):[4,3,2,1]})

# Only use the 1st level index (e.g. "name_01" and "name_02")
a.columns = a.columns.get_level_values(1)

b = pd.DataFrame({"name_0":[10,2,30,40],
                 "name_1":[40,30,20,10]})    

# Notice how left_on is now a normal string since only 1 level is used
pd.merge(a,b,how="left",left_on=["name_01"],right_on=["name_0"])

我建议您检查两个数据帧是否具有相同的级别索引。如果不考虑删除一个级别或将它们夷为一个等级,请将两个DFS的样本发布到两个DFS的后样本中。