如何在Python中删除日期上相同的数据

2024-09-26 18:12:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下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实现这个算法? 非常感谢。你知道吗


Tags: csvindateorderblueredstatetom
1条回答
网友
1楼 · 发布于 2024-09-26 18:12:27

使用^{}keep=False来获取列表中指定的每列的所有重复项,并设置新列^{}

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

如果需要删除具有所有重复值的行,请使用^{}~的反转掩码-因此,如果不重复,则选择所有行:

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

相关问题 更多 >

    热门问题