如何基于两列的值删除重复的行?

时间:2019-11-21 06:49:14

标签: python pandas row data-science drop-duplicates

我有一个像这样的数据框:

SQL> SELECT
  2      table_name, COLUMN_NAME,
  3      to_number(xmlquery('/ROWSET/ROW/C/text()'
  4      passing xmltype(dbms_xmlgen.getxml(
  5        'select count(1) as c '
  6        || 'from "' || owner || '"."' || table_name || '" WHERE ' || COLUMN_NAME  || '=''100'''))
  7    returning content)) as cOUNT
  8  FROM ALL_TAB_COLS A
  9  WHERE A.COLUMN_NAME = 'CUST_ID';

TABLE_NAME           COLUMN_NAME               COUNT
-------------------- -------------------- ----------
ACCOUNT              CUST_ID                       1
ACTIVE_USERS         CUST_ID                       3

SQL>

我想保留两个日期相同的行。 我正在这样做:

Category Date_1       Score_1    Date_2           Score_2
  A      13/11/2019    5        13/11/2019        10
  A      13/11/2019    5        14/11/2019        55
  A      13/11/2019    5        15/11/2019        45
  A      13/11/2019    5        16/11/2019        80
  A      14/11/2019    3        13/11/2019        10
  A      14/11/2019    3        14/11/2019        55
  A      14/11/2019    3        15/11/2019        45
  A      14/11/2019    3        16/11/2019        80
  A      15/11/2019    7        13/11/2019        10
  A      15/11/2019    7        14/11/2019        55
  A      15/11/2019    7        15/11/2019        45
  A      15/11/2019    7        16/11/2019        80
  B      13/11/2019    4        13/11/2019        18
  B      13/11/2019    4        14/11/2019        65
  B      13/11/2019    4        15/11/2019        75
  B      13/11/2019    4        16/11/2019        89
  B      14/11/2019    9        13/11/2019        18
  B      14/11/2019    9        14/11/2019        65
  B      14/11/2019    9        15/11/2019        75
  B      14/11/2019    9        16/11/2019        89
  B      15/11/2019    8        13/11/2019        18
  B      15/11/2019    8        14/11/2019        65
  B      15/11/2019    8        15/11/2019        75
  B      15/11/2019    8        16/11/2019        89

但是它不起作用。无法弄清楚如何删除这些多余的行吗?

2 个答案:

答案 0 :(得分:3)

boolean indexing与两个列进行比较:

df1 = df[df['Date_1'] == df['Date_2'])

DataFrame.query

df1 = df.query("Date_1 == Date_2")

答案 1 :(得分:1)

您可以将duplicated与参数subset一起使用,以指定要用keep=False检查的列,以用于所有通过布尔索引进行掩码和过滤的重复项。以下应该起作用:

df = df[df.duplicated(subset=['Date_1', 'Date_2'], keep=False)]

备注:最初,我可能会误会OP希望删除重复项,并给出以下答案:

df = df.drop_duplicates(subset=['Date_1', 'Date_2'], keep='last')

您应始终像上面一样分配df,以应用更改。否则,您可以添加inplace=True来应用更改而无需分配:

df.drop_duplicates(subset=['Date_1', 'Date_2'], keep='last', inplace=True)

如果这与其他人提供的解决方案一样不起作用,则您可能需要检查subset中的那些列的数据类型是否存在差异,例如日期时间格式。