1 回答
TA贡献1796条经验 获得超4个赞
我想我明白你现在想要实现的目标,但我认为这不会join让你实现这一目标。和DataFrame.join都DataFrame.merge可以调用pandas.core.reshape.merge.merge,但使用DataFrame.merge可以让您更好地控制应用的默认值。
在您的情况下,您可以使用引用列来通过元组列表加入,其中元组的元素是多索引列的级别。即要使用variables / fruit列,可以通过[('variables', 'fruit')].
使用元组是索引多索引列(和行索引)的方式。您需要将其包装在列表中,因为可以使用多个列或多个多索引列来执行合并操作,就像 SQL 中的 JOIN 语句一样。传递单个字符串只是一个方便的情况,它会为您包装在列表中。
由于您仅加入 1 列,因此它是单个元组的列表。
import pandas as pd
index1 = pd.MultiIndex.from_product([["variables"], ["number", "fruit"]])
df1 = pd.DataFrame([["one", "apple"], ["two", "banana"]], columns=index1)
index2 = pd.MultiIndex.from_product([["variables"], ["fruit", "color"]])
df2 = pd.DataFrame([["banana", "yellow"]], columns=index2)
df1.merge(df2, how='left', on=[('variables', 'fruit')])
# returns:
variables
number fruit color
0 one apple NaN
1 two banana yellow
添加回答
举报