Python 熊猫:基于行值删除重复项
我有一个数据帧,我想根据不同的条件删除重复项Python 熊猫:基于行值删除重复项,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,我想根据不同的条件删除重复项 A B 0 1 1.0 1 1 1.0 2 2 2.0 3 2 2.0 4 3 3.0 5 4 4.0 6 5 5.0 7 - 5.1 8 - 5.1 9 - 5.3 我想删除A列中除带“-”的行以外的所有重复项。在这之后,我
A B
0 1 1.0
1 1 1.0
2 2 2.0
3 2 2.0
4 3 3.0
5 4 4.0
6 5 5.0
7 - 5.1
8 - 5.1
9 - 5.3
我想删除A列中除带“-”的行以外的所有重复项。在这之后,我想删除A列中的重复项,并根据它们的B列值使用“-”作为值。给定输入数据帧,这应返回以下内容:-
A B
0 1 1.0
2 2 2.0
4 3 3.0
5 4 4.0
6 5 5.0
7 - 5.1
9 - 5.3
我有下面的代码,但是对于大量的数据来说效率不是很高,我该如何改进它
def generate(df):
str_col = df[df["A"] == "-"]
df.drop(df[df["A"] == "-"].index, inplace=True)
df = df.drop_duplicates(subset="A")
str_col = b.drop_duplicates(subset="B")
bigdata = df.append(str_col, ignore_index=True)
return bigdata.sort_values("B")
重复
和eq
:
df[~df.duplicated('A') # keep those not duplicates in A
| (df['A'].eq('-') # or those '-' in A
& ~df['B'].duplicated())] # which are not duplicates in B
输出:
A B
0 1 1.0
2 2 2.0
4 3 3.0
5 4 4.0
6 5 5.0
7 - 5.1
9 - 5.3
df.删除重复项(子集=['A','B'])
给出完整的数据集:
A B C
0 1 1.0 0
1 1 1.0 1
2 2 2.0 2
3 2 2.0 3
4 3 3.0 4
5 4 4.0 5
6 5 5.0 6
7 - 5.1 7
8 - 5.1 8
9 - 5.3 9
结果:
A B C
0 1 1.0 0
2 2 2.0 2
4 3 3.0 4
5 4 4.0 5
6 5 5.0 6
7 - 5.1 7
9 - 5.3 9
groupby
+head
df.groupby(['A','B']).head(1)
Out[7]:
A B
0 1 1.0
2 2 2.0
4 3 3.0
5 4 4.0
6 5 5.0
7 - 5.1
9 - 5.3
在您给定的示例中,
df.drop\u duplicates()
也可以实现同样的效果。您将如何实现这一点,请参见我对PandasSo simple是新手。谢谢注意:这只适用于您的A
和B
完全重复的情况。e、 g.如果第1行B
变为2.0
,则第0行和第1行仍将显示。虽然很简单,但这与我的答案有相同的警告-如果A重复,但B唯一,则不会删除A的重复项。