我有一个像这样的数据框:
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
但是它不起作用。无法弄清楚如何删除这些多余的行吗?
答案 0 :(得分:3)
将boolean indexing
与两个列进行比较:
df1 = df[df['Date_1'] == df['Date_2'])
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
中的那些列的数据类型是否存在差异,例如日期时间格式。