根据重复的列值选择熊猫数据框的行

时间:2020-10-28 15:00:50

标签: python-3.x pandas

我有这样的数据框

   customer_id  some_data
0      1            A
1      2            B
2      3            C  
3      1            D

,以及具有重复项的customer_id值列表,例如[1,2,2]。基于这些值,我想获得一个dataframe,其中customer_id等于列表中的值,但是如果我在列表中得到重复的值,则希望行中有重复的值,例如[1,2,2]输出应该是

   customer_id  some_data
 0     1            A
 3     1            D
 1     2            B
 1     2            B    

我尝试过类似的事情

df_new= df[df.customer_id == list[0]]
for i in range(1,len(list)):
    temp = df[df.customer_id == list[i]]
    df_new = pd.concat([df_new, temp])

此代码有效,但是我的df很大,因此该代码的工作时间很大,我可以以某种方式对其进行优化吗?

1 个答案:

答案 0 :(得分:1)

使用您希望拥有的ID创建另一个虚拟数据框:

df2 = pd.DataFrame({'customer_id':[1,2,2]})

    customer_id
0   1
1   2
2   2

并将其与给定数据框合并:

df.merge(df2)

所需结果:

 customer_id    some_data
0   1            A
1   1            D
2   2            B
3   2            B

最重要的是:您的代码可以运行,但是对于大数据来说非常慢。处理时间长的原因是您的 for循环!要对其进行优化,您应该始终以向量化为目标。