numpy 如何删除单个 Dataframe 中具有多个报价器的重复日期?

bmvo0sr5  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(100)

假设我有一个 Dataframe ,其中包含不同符号的分钟数据:

  1. timestamp open high low close volume trade_count vwap symbol volume_10_day
  2. 0 2022-09-26 08:20:00+00:00 1.58 1.59 1.34 1.34 972 15 1.433220 ADA 2889145.1
  3. 1 2022-09-26 08:25:00+00:00 1.45 1.66 1.41 1.66 3778 25 1.551821 ADA 2889145.1
  4. 2 2022-09-26 08:30:00+00:00 1.70 1.70 1.39 1.47 13683 59 1.499826 ADA 2889145.1
  5. 3 2022-09-26 08:35:00+00:00 1.43 1.50 1.37 1.37 3627 10 1.406485 ADA 2889145.1
  6. 4 2022-09-26 08:40:00+00:00 1.40 1.44 1.40 1.44 1352 9 1.408365 ADA 2889145.1
  7. --
  8. 100 2022-09-26 08:20:00+00:00 1.58 1.59 1.34 1.34 972 15 1.433220 ADD 2889145.1
  9. 101 2022-09-26 08:25:00+00:00 1.45 1.66 1.41 1.66 3778 25 1.551821 ADD 2889145.1
  10. 102 2022-09-26 08:30:00+00:00 1.70 1.70 1.39 1.47 13683 59 1.499826 ADD 2889145.1
  11. 103 2022-09-26 08:35:00+00:00 1.43 1.50 1.37 1.37 3627 10 1.406485 ADD 2889145.1
  12. 104 2022-09-26 08:40:00+00:00 1.40 1.44 1.40 1.44 1352 9 1.408365 ADD 2889145.1

我希望能够过滤列表,以便它只返回一个包含多个日期的 Dataframe ,但不会重复任何日期(如上面的示例,ADA和ADD都显示为日期2022-09-26)。
如何过滤掉这样的重复日期?我不在乎它是如何完成的--它可以只保留给定日期中第一个出现的符号,例如:

  1. timestamp open high low close volume trade_count vwap symbol volume_10_day
  2. 0 2022-09-26 08:20:00+00:00 1.58 1.59 1.34 1.34 972 15 1.433220 ADA 2889145.1
  3. 1 2022-09-26 08:25:00+00:00 1.45 1.66 1.41 1.66 3778 25 1.551821 ADA 2889145.1
  4. 2 2022-09-26 08:30:00+00:00 1.70 1.70 1.39 1.47 13683 59 1.499826 ADA 2889145.1
  5. 3 2022-09-26 08:35:00+00:00 1.43 1.50 1.37 1.37 3627 10 1.406485 ADA 2889145.1
  6. 4 2022-09-26 08:40:00+00:00 1.40 1.44 1.40 1.44 1352 9 1.408365 ADA 2889145.1
  7. --
  8. 100 2022-09-27 08:20:00+00:00 1.58 1.59 1.34 1.34 972 15 1.433220 ADB 2889145.1
  9. 101 2022-09-27 08:25:00+00:00 1.45 1.66 1.41 1.66 3778 25 1.551821 ADB 2889145.1
  10. 102 2022-09-27 08:30:00+00:00 1.70 1.70 1.39 1.47 13683 59 1.499826 ADB 2889145.1
  11. 103 2022-09-27 08:35:00+00:00 1.43 1.50 1.37 1.37 3627 10 1.406485 ADB 2889145.1
  12. 104 2022-09-27 08:40:00+00:00 1.40 1.44 1.40 1.44 1352 9 1.408365 ADB 2889145.1

我如何才能做到这一点?
更新,尝试了Lukas建议的drop_duplicates,如下所示:
从df中的db读取:

  1. df = pd.read_sql_query("SELECT * from ohlc_minutes", conn)

获取长度(4769):

  1. print(len(df))

然后道:

  1. df['timestamp'] = pd.to_datetime(df['timestamp'])
  2. df.drop_duplicates(subset=['symbol', 'timestamp'])
  3. print(len(df))

但它返回相同的长度。
如何让drop_duplicates处理分钟数据?

gcuhipw9

gcuhipw91#

您可以使用pd.drop_duplicates

  1. df.drop_duplicates(subset=['timestamp', 'symbol'])

默认情况下,它将采用timestampsymbol列中的值的组合的第一次出现,但您可以更改此行为。

相关问题