在pandas数据框中使用来自另一列的唯一记录创建新列

时间:2018-08-08 11:42:15

标签: python python-3.x pandas

我需要使用现有列中的唯一记录创建另一列。这是我所做的,结果令人满意。但是,对于具有超过200万条记录的表,需要花费大量时间来处理。我希望找出是否有更快的方法来实现这一目标。

代码

import pandas as pd
df=pd.DataFrame({'RecordSku':["JQUZJM", "JQUZJM", "RTSHQN", "HLDPJP", 
"HLDPJP", "UCJXWO", "JAOKYL", "JAOKYL", "IVEMZB", "NTHNOW", "JAIFQI", 
"JAIFQI", "KPMXBI", "SNAFIC", "RTSHQN", "FJRCAY", "NAYGXF", "PSJFEU", 
"MMBNMW", "MMBNMW", "MMBNMW", "MMBNMW", "ZWVPLB", "KDARIS", "KDARIS"]}) 

df['Unique'] ="" # Create a column to populate the unique status

for x in range(0,len(df)):
    df['Unique'].iloc[x] = df.iloc[0:x].RecordSku.str.count(df.RecordSku[x]).sum()

     if df['Unique'][x]==0:
        df['Unique'][x]=1
    else:
        df['Unique'][x]=0

输出

    RecordSku  Unique
 ---------------------
 0     JQUZJM       1
 1     JQUZJM       0
 2     RTSHQN       1
 3     HLDPJP       1
 4     HLDPJP       0
 5     UCJXWO       1
 6     JAOKYL       1
 7     JAOKYL       0
 8     IVEMZB       1
 9     NTHNOW       1
 10    JAIFQI       1
 11    JAIFQI       0
 12    KPMXBI       1
 13    SNAFIC       1
 14    RTSHQN       0
 15    FJRCAY       1
 16    NAYGXF       1
 17    PSJFEU       1
 18    MMBNMW       1
 19    MMBNMW       0
 20    MMBNMW       0
 21    MMBNMW       0
 22    ZWVPLB       1
 23    KDARIS       1
 24    KDARIS       0

上面提到的输出正是我想要的。所有第一个唯一记录都应为1,下次出现该记录时应为0。 我只是想找到一种更有效的方式来处理此问题。

1 个答案:

答案 0 :(得分:3)

您可以使用pd.Series.duplicated来确定序列中的值是否重复。在这种情况下,您需要非重复的元素,即通过~求反,并从bool转换为int

df['Unique'] = (~df['RecordSku'].duplicated()).astype(int)