我需要使用现有列中的唯一记录创建另一列。这是我所做的,结果令人满意。但是,对于具有超过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。 我只是想找到一种更有效的方式来处理此问题。
答案 0 :(得分:3)
您可以使用pd.Series.duplicated
来确定序列中的值是否重复。在这种情况下,您需要非重复的元素,即通过~
求反,并从bool
转换为int
。
df['Unique'] = (~df['RecordSku'].duplicated()).astype(int)