我有这样的数据框
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很大,因此该代码的工作时间很大,我可以以某种方式对其进行优化吗?
答案 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循环!要对其进行优化,您应该始终以向量化为目标。