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

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

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

timestamp  open  high   low  close  volume  trade_count      vwap symbol  volume_10_day
0     2022-09-26 08:20:00+00:00  1.58  1.59  1.34   1.34     972           15  1.433220    ADA      2889145.1
1     2022-09-26 08:25:00+00:00  1.45  1.66  1.41   1.66    3778           25  1.551821    ADA      2889145.1
2     2022-09-26 08:30:00+00:00  1.70  1.70  1.39   1.47   13683           59  1.499826    ADA      2889145.1
3     2022-09-26 08:35:00+00:00  1.43  1.50  1.37   1.37    3627           10  1.406485    ADA      2889145.1
4     2022-09-26 08:40:00+00:00  1.40  1.44  1.40   1.44    1352            9  1.408365    ADA      2889145.1
--
100     2022-09-26 08:20:00+00:00  1.58  1.59  1.34   1.34     972           15  1.433220    ADD      2889145.1
101     2022-09-26 08:25:00+00:00  1.45  1.66  1.41   1.66    3778           25  1.551821    ADD      2889145.1
102     2022-09-26 08:30:00+00:00  1.70  1.70  1.39   1.47   13683           59  1.499826    ADD      2889145.1
103     2022-09-26 08:35:00+00:00  1.43  1.50  1.37   1.37    3627           10  1.406485    ADD      2889145.1
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)。
如何过滤掉这样的重复日期?我不在乎它是如何完成的--它可以只保留给定日期中第一个出现的符号,例如:

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

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

获取长度(4769):

print(len(df))

然后道:

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

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

gcuhipw9

gcuhipw91#

您可以使用pd.drop_duplicates

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

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

相关问题