考虑以下DF
import pandas as pd
df = pd.DataFrame({'ID': [1,1,1,1,2,2,2,2],
'Course':
['English','English','English','History','Science', 'Science', 'Science','Math'],
'Status':
['Attended', 'Requested', 'Partially Attended', 'No show',
'Requested','Attended','Partially Attended','No show']})
df.set_index(['ID'])
print(df)
Course Status
ID
1 English Attended
1 English Requested
1 English Partially Attended
1 History No show
2 Science Requested
2 Science Attended
2 Science Partially Attended
2 Math No show
我正在尝试根据以下3个假设找出一种删除重复项的方法。
我目前正在学习和学习DataCamps Python和pandas课程,因此我熟悉groupby,aggregate,sort函数,可以在其中删除带有时间序列数据的更高版本或更高版本。我不知道如何将条件或逻辑应用于放置函数。我已经在该论坛中搜索了类似的功能,但没有对自己的DF应用任何功能。
我想要的结果如下:
Course Status
ID
1 English Attended
1 English Partially Attended
1 History No show
2 Science Attended
2 Science Partially Attended
2 Math No show
答案 0 :(得分:2)
duplicated
还是不是Requested
df[~df.duplicated(['ID', 'Course'], keep=False) | df.Status.ne('Requested')]
Course ID Status
0 English 1 Attended
2 English 1 Partially Attended
3 History 1 No show
5 Science 2 Attended
6 Science 2 Partially Attended
7 Math 2 No show
标识事物是否重复。我传递了一个列名列表,用于确定重复性。通过使用keep=False
,我指定我也想将第一次出现或最后一次出现也计为重复项。
df.duplicated(['ID', 'Course'], keep=False)
0 True
1 True
2 True
3 False
4 True
5 True
6 True
7 False
dtype: bool
但是,如果它是重复项,还要检查它是否为Requested
df.Status.ne('Requested')
0 True
1 False
2 True
3 True
4 False
5 True
6 True
7 True
Name: Status, dtype: bool
因此,我们希望行不是重复的,并且如果行至少不等于Status