我有一个如下所示的 csv 文件。
In 'order.csv'
date orderName orderNumber state
1/7 Tom 1
1/7 Jeny 4
1/7 Brown 2
1/7 Tom 3
1/8 Sky 5
1/8 Blue 7
1/8 Red 6
1/8 Wine 8
1/9 Tom 9
1/9 Earth 11
1/9 Earth 10
我想通过算法得到下面的结果。
In 'order.csv'
date orderName orderNumber state
1/7 Tom 1 duplicated
1/7 Jeny 4
1/7 Brown 2
1/7 Tom 3 duplicated
1/8 Sky 5
1/8 Blue 7
1/8 Red 6
1/8 Wine 8
1/9 Tom 9
1/9 Earth 11 duplicated
1/9 Earth 10 duplicated
1/9 也有汤姆。但由于日期不同,因此不会被视为重复。仅考虑复制取决于每个日期。
我怎样才能用python制作这个算法?非常感谢。
使用DataFrame.duplicated
使用 keep=False
获取列表中指定列的所有重复项并设置新列 numpy.where
:
df['state'] = np.where(df.duplicated(['date','orderName'], keep=False), 'duplicated', '')
print (df)
date orderName orderNumber state
0 1/7 Tom 1 duplicated
1 1/7 Jeny 4
2 1/7 Brown 2
3 1/7 Tom 3 duplicated
4 1/8 Sky 5
5 1/8 Blue 7
6 1/8 Red 6
7 1/8 Wine 8
8 1/9 Tom 9
9 1/9 Earth 11 duplicated
10 1/9 Earth 10 duplicated
详细信息:
print (df.duplicated(['date','orderName'], keep=False))
0 True
1 False
2 False
3 True
4 False
5 False
6 False
7 False
8 False
9 True
10 True
dtype: bool
如果需要删除包含所有重复值的行,请使用 boolean indexing
使用 ~
的反转掩码 - 所以如果不重复,它会选择所有行:
df1 = df[~df.duplicated(['date','orderName'], keep=False)]
df1 = df.drop_duplicates(['date','orderName'], keep=False)
print (df1)
date orderName orderNumber state
1 1/7 Jeny 4 NaN
2 1/7 Brown 2 NaN
4 1/8 Sky 5 NaN
5 1/8 Blue 7 NaN
6 1/8 Red 6 NaN
7 1/8 Wine 8 NaN
8 1/9 Tom 9 NaN
我是一名优秀的程序员,十分优秀!