当前位置: 首页 > 知识库问答 >
问题:

避免数据帧concat/merge/join中的重复数据

吴弘壮
2023-03-14

我试图Conconat 2 DataFrames,但. Join正在创建一个不需要的副本。

df_ask:

timestamp      price      volume
1520259290     10.5       100
1520259275     10.6       2000
1520259275     10.55      200

df_bid:
timestamp      price      volume
1520259290     10.25      500
1520259280     10.2       300
1520259275     10.1       400

我试过:

depth = pd.concat([df_ask,df_bid], axis=1, keys=['Ask Orders','Bid Orders'])

但这返回了一个我理解的错误(“concat未能重新索引,仅对唯一值的索引对象有效”)

我试着:

 df_ask.join(df_bid, how='outer', lsuffix='_ask', rsuffix='_bid')

它没有给出错误,但给出以下数据帧:

timestamp      price_ask   volume_bid   price_bid   volume_bid
1520259290     10.5         100          10.25       500
1520259280      NaN         NaN          10.2        300
1520259275     10.6         2000         10.1        400
1520259275     10.55        200          10.1        400

我的问题是重复的10.1和400在时间戳1520259275。它们不在原始df_bid数据框中两次,应该只在这个df中出现一次。有两行相同的时间戳是正确的,因为此时有两个询问行,但是应该只有一个投标信息行与此时间戳相关联。另一个应该是NaN。

ie我要找的是:

timestamp      price_ask   volume_bid   price_bid   volume_bid
1520259290     10.5         100          10.25       500
1520259280      NaN         NaN          10.2        300
1520259275     10.6         2000         10.1        400
1520259275     10.55        200           NaN        NaN

我已经浏览了merge/join/concat文档和这个问题,但是我找不到我想要的。提前谢谢

共有1个答案

岳晟
2023-03-14

您隐式地假设索引的第一个实例应该与索引的另一个第一个实例对齐。在这种情况下,使用Groupbycaquit来建立每个唯一索引的排序。

df_ask = df_ask.set_index(df_ask.groupby('timestamp').cumcount(), append=True)
df_bid = df_bid.set_index(df_bid.groupby('timestamp').cumcount(), append=True)

df_ask.join(df_bid, how='outer', lsuffix='_ask', rsuffix='_bid')

              price_ask  volume_ask  price_bid  volume_bid
timestamp                                                 
1520259275 0      10.60      2000.0      10.10       400.0
           1      10.55       200.0        NaN         NaN
1520259280 0        NaN         NaN      10.20       300.0
1520259290 0      10.50       100.0      10.25       500.0
 类似资料:
  • 我目前正在开发一个Android应用程序,我使用Firebase(实时功能)作为后端服务。此外,我开发了这个功能,如下所示。 扩展代码工作得很好,它检查现有数据并显示Toast消息,但在数据仍进入数据库后,我想消除重复数据。

  • 我有下一个示例代码: 你可以看到id是JSON格式中的一个重复字段,我知道PostgreSQL有一些功能可以避免这个问题,但我找不到。

  • 我有一个严重的问题,我没有弄清楚。我有一个表名叫做“结果”。我想要实现的是,当我插入新记录时,它会正确地插入数据库。 在这个水平上,我的脚本运行良好。但是我想第二次点击添加新结果记录时,如果之前输入了数据,那么它将显示我的数据,如果我想更新我的数据,我可以。如果以前没有输入数据,那么我会将数据插入数据库。我成功地限制用户输入重复数据,但我没有成功地在同一页上显示数据。 我有一个显示测试页面,当我点

  • 我有一个如下所示的数据帧: 我需要提取lat=30.75和lon 76.25的行,对于我使用的行: 但这表明了这个错误:

  • 11.2. 避免通过 HTTP 重复地获取数据 假如说你想用 HTTP 下载资源, 例如一个 Atom feed 汇聚。你不仅仅想下载一次; 而是想一次又一次地下载它, 如每小时一次, 从提供 news feed 的站点获得最新的消息。让我们首先用一种直接而原始的方法来实现它, 然后看看如何改进它。 例 11.2. 用直接而原始的方法下载 feed >>> import urllib >>> d