gpt4 book ai didi

python - 了解 pandas merge 中的 "left_index"和 "right_index"参数

转载 作者:太空狗 更新时间:2023-10-30 02:52:52 43 4
gpt4 key购买 nike

我真的很难理解 pandas.merge 中的“left_index”和“right_index”参数。我阅读了文档,四处搜索,尝试了各种设置并试图理解,但我仍然感到困惑。考虑这个例子:

left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 
'key2': ['K0', 'K1', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3'],
'E': [1,2,3,4]})

现在,当我运行以下命令时:

pd.merge(left, right, left_on=['key2', 'key1'], right_on=['key1', 'key2'], how='outer', indicator=True, left_index=True)

我得到:

  key1_x key2_x    A    B key1_y key2_y    C    D    E      _merge
0 K0 K0 A0 B0 K0 K0 C0 D0 1.0 both
1 K0 K1 A1 B1 K1 K0 C1 D1 2.0 both
2 K0 K1 A1 B1 K1 K0 C2 D2 3.0 both
3 K1 K0 A2 B2 NaN NaN NaN NaN NaN left_only
3 K2 K1 A3 B3 NaN NaN NaN NaN NaN left_only
3 NaN NaN NaN NaN K2 K0 C3 D3 4.0 right_only

但是,使用 right_index=True 运行相同的代码会出现错误。如果我同时介绍两者,则相同。更有趣的是,运行以下合并会产生非常意外的结果

pd.merge(left, right,  on=['key1', 'key2'],how='outer', validate = 'one_to_many', indicator=True, left_index = True, right_index = True)

结果是:

  key1 key2   A   B   C   D  E _merge
0 K0 K0 A0 B0 C0 D0 1 both
1 K0 K1 A1 B1 C1 D1 2 both
2 K1 K0 A2 B2 C2 D2 3 both
3 K2 K1 A3 B3 C3 D3 4 both

如您所见,key1key2 右帧的所有信息都完全丢失了。

请帮助我理解这些参数的目的和功能。谢谢。

最佳答案

合并有两种方式:

列-列合并:使用 left_on、right_on 以及如何。

例子:

# Gives same answer
pd.merge(left, right, left_on=['key2', 'key1'], right_on=['key1', 'key2'], how = 'outer')
pd.merge(left, right, on=['key1', 'key2'], how='outer', indicator=True)

Index-Index Merge:将 left_index 和 right_index 设置为 True 或使用 on 和 use how。

例子:

pd.merge(left, right, how = 'inner', right_index = True, left_index = True)
# If you make matching unique multi-indexes for both data frames you can do
# pd.merge(left, right, how = 'inner', on = ['indexname1', 'indexname2'])
# In your data frames, you're keys duplicate values so you can't do this
# In general, a column with duplicate values does not make a good key

列索引合并:使用 left_on + right_index 或 left_index + right_on 以及如何使用。

注意:index和left_on中的值必须匹配。如果你的 index 是一个整数而你的 left_on 是一个字符串,你会得到错误。此外,索引级别的数量必须匹配。

例子:

# If how not specified, inner join is used
pd.merge(left, right, right_on=['E'], left_index = True, how = 'outer')

# Gives error because left_on is string and right_index is integer
pd.merge(left, right, left_on=['key1'], right_index = True, how = 'outer')

# This gave you error because left_on has indexing level of 2 but right_index only has indexing level of 1.
pd.merge(left, right, left_on=['key2', 'key1'], right_on=['key1', 'key2'], how='outer', indicator=True, right_index=True)

您混合了不同类型的合并,结果很奇怪。如果您在概念上看不到合并将如何发生,那么计算机很可能不会做得更好。

关于python - 了解 pandas merge 中的 "left_index"和 "right_index"参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51814612/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com