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

Ale*_*ini 3 python dataframe pandas

我有一个数据框,我想根据不同的条件删除重复项。

        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
Run Code Online (Sandbox Code Playgroud)

我想从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
Run Code Online (Sandbox Code Playgroud)

我有以下代码,但是对于大量数据而言效率不高,我该如何改善它。

 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")
Run Code Online (Sandbox Code Playgroud)

Qua*_*ang 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
Run Code Online (Sandbox Code Playgroud)

输出:

   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
Run Code Online (Sandbox Code Playgroud)