Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 基于具有重复项的列值选择dataframe的行_Python 3.x_Pandas - Fatal编程技术网

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')