pea*_*ark 3 python excel merge vlookup pandas
关于使用合并在熊猫中复制Excel的Index-Match功能的文章有好几篇,但是合并似乎并没有涵盖Excel的Index-Match的最基本功能之一。
我有一个可行的解决方法,但是我敢肯定有更好的方法。当然,我可能会缺少有关pandas.merge的明显信息。
假设我们有以下两个表格
t1
numbers letters
0 1623 a
1 3266 b
2 3672 c
t2
letters target
0 a ddd
1 a ddd
2 a ddd
3 b eee
4 b eee
5 b eee
6 c fff
7 c fff
8 c fff
Run Code Online (Sandbox Code Playgroud)
并且我们想向t1添加一列,该列根据t2.letters中的值简单地映射t2.target中的值以产生以下结果:
numbers letters target
0 1623 a ddd
1 3266 b eee
2 3672 c fff
Run Code Online (Sandbox Code Playgroud)
使用pandas.merge,似乎t2.target中的所有重复值都必须显示在结果DataFrame中,如下所示:
numbers letters target
0 1623 a ddd
1 1623 a ddd
2 1623 a ddd
3 3266 b eee
4 3266 b eee
5 3266 b eee
6 3672 c fff
7 3672 c fff
8 3672 c fff
Run Code Online (Sandbox Code Playgroud)
但是,在许多情况下,这不是我们想要的。
一种解决方法是使用.duplicated():
t2_unique = t2[t2.target.duplicated==False]
t1.merge(t2_unique)
Run Code Online (Sandbox Code Playgroud)
这将产生上面所需的3x3表格。但是,鉴于其余大熊猫的思想和全面性以及人们在Excel中执行此类操作的频率,我很难相信,在大熊猫中,没有比这更直接的途径来实现这种输出合并或其他内容。
感谢您阅读本文。
好吧,一个人的责任是另一个人的特征。如果合并丢弃记录,那将是不好的。在进行实质性操作之前,请先清理数据。您正在执行联接操作,并且由于至少在显示的thee变量中存在重复项(可能存在更多不同的变量),因此联接会遵守该要求。另外,您实际上是在将值从字母映射到目标。但是,要使此有意义,您再次需要唯一的key:value对,以避免歧义。
不过,映射可以轻松完成。
t2.set_index('letters',inplace=True)
t2_map = t2.target.to_dict()
Run Code Online (Sandbox Code Playgroud)
这实际上产生了一个行为良好的字典:
{'a': 'ddd', 'b': 'eee', 'c': 'fff'}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用它来映射target
到letters
中的t1
。
t1['target']=t1.letters.map(t2_map)
t1
numbers letters target
0 1623 a ddd
1 3266 b eee
2 3672 c fff
Run Code Online (Sandbox Code Playgroud)