Python 3.x 基于具有重复项的列值选择dataframe的行
我有这样的数据帧Python 3.x 基于具有重复项的列值选择dataframe的行,python-3.x,pandas,Python 3.x,Pandas,我有这样的数据帧 customer_id some_data 0 1 A 1 2 B 2 3 C 3 1 D 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.
customer_id some_data
0 1 A
1 2 B
2 3 C
3 1 D
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])
以及具有重复项的客户id值列表,例如[1,2,2]。基于这些值,我希望得到一个数据帧,其中customer_id等于列表中的一个值,但如果我在列表中得到一个重复的值,我希望行中有重复的值,例如,对于[1,2,2],我的输出应该是
customer_id some_data
0 1 A
3 1 D
1 2 B
1 2 B
我试过这样的东西
customer_id some_data
0 1 A
1 2 B
2 3 C
3 1 D
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很大,因此此代码的工作时间很长,我是否可以对其进行优化?使用您想要的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循环要优化它,您应该始终以矢量化为目标。df.merge(pd.DataFrame({'customer\u id':[1,2,2]},on='customer\u id')
。