【发布时间】:2020-05-02 09:58:38
【问题描述】:
嗨,这是我之前的一个问题how do I perform a vlookup equivalent operation on my dataframe with some additional conditions的后续跟进
在另一个问题中,我的第一个数据框是
list = ['Computer', 'AA', 'Monitor', 'BB', 'Printer1', 'BB', 'Desk', 'AA', 'Printer2', 'DD', 'Desk', 'BB']
list2 = [1500, 232, 300, 2323, 150, 2323, 250, 2323, 23, 34, 45, 56]
df = pd.DataFrame(list,columns=['product'])
df['number'] = list2
如果我的第二个数据框有多个值表示“AA”,如下所示
list_n = ['AA','AA','BB','BB','CC','DD']
list_n2 = ['Y','N','N','Y','N','Y']
df2 = pd.DataFrame(list_n,columns=['product'])
df2['to_add'] = list_n2
这就是它的样子
product to_add
0 AA Y
1 AA N
2 BB N
3 BB Y
4 CC N
5 DD Y
当我执行pd.merge(df, df2, on="product", how="left")
我明白了
product number to_add
0 Computer 1500 NaN
1 AA 232 Y
2 AA 232 N
3 Monitor 300 NaN
4 BB 2323 N
5 BB 2323 Y
6 Printer1 150 NaN
7 BB 2323 N
8 BB 2323 Y
9 Desk 250 NaN
10 AA 2323 Y
11 AA 2323 N
12 Printer2 23 NaN
13 DD 34 Y
14 Desk 45 NaN
15 BB 56 N
16 BB 56 Y
正如您现在看到的,AA 和 BB 有多行。我只希望'AA'(和'BB')的第一个值(或其中一个值)被拉过(当然不改变数据帧的顺序)。总之不想要多行。澄清一下,我的 df2 有超过 6000 行,我不知道哪些条目是重复的。
所以答案应该看起来很合适
product number to_add
0 Computer 1500 NaN
1 AA 232 Y
2 Monitor 300 NaN
3 BB 2323 N
4 Printer1 150 NaN
5 BB 2323 N
6 Desk 250 NaN
7 AA 2323 Y
8 Printer2 23 NaN
9 DD 34 Y
10 Desk 45 NaN
11 BB 56 N
【问题讨论】: