【问题标题】:performing a merge function in python, when I don't want the values to repeat当我不希望值重复时,在 python 中执行合并函数
【发布时间】: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

【问题讨论】:

    标签: python dataframe merge


    【解决方案1】:

    用途:

    df_m = pd.merge(df, df2, on="product", how="left")
    
    m = df_m["product"].isin(df2["product"]) & df_m["product"].eq(df_m["product"].shift())
    df_m = df_m[~m].reset_index(drop=True)
    print(df_m)
    

    打印出来:

         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      N
    10      Desk      45    NaN
    11        BB      56      N
    

    【讨论】:

    • 感谢伙伴,这很有帮助,唯一的问题是我的 df2 相当大,我不知道有多少条目重复。我现在在我的问题中说得更清楚了。所以简而言之,它不仅仅是重复的 AA,可能还有 50-60 个其他整体(我不知道)可能在 df2 中重复。
    • @user13412850 我看到你已经编辑了这个问题。是否要保留与“打印机”、“计算机”...相对应的重复值?
    • 是的,如果重复这些值很好,只有我从 df2 提取的值不应该重复。
    • 不完全是,我再次编辑了我的问题,并在底部添加了一个表格,说明它的理想外观
    • 完美!这对我有用!再次感谢您的努力!
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2020-08-11
    • 2019-05-20
    相关资源
    最近更新 更多