熊猫:根据行值删除重复项

时间:2019-10-21 16:02:16

标签: 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列值,使用“-”作为值从A列删除重复项。给定输入数据框,它应该返回以下内容:-

        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")

3 个答案:

答案 0 :(得分:5)

duplicatedeq

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

答案 1 :(得分:2)

df.drop_duplicates(subset=['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

答案 2 :(得分:2)

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