簡體   English   中英

Pandas:根據行值刪除重復項

[英]Pandas: Drop duplicates based on row value

我有一個 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 值使用“-”作為值。 給定輸入 dataframe,這應該返回以下內容:-

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

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

Output:

   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_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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM