python - 避免数据帧中的重复数据连接/合并/连接

标签 python python-3.x pandas dataframe concatenation

我正在尝试连接 2 个 DataFrame,但 .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'])

但这会返回一个我确实理解的错误(“连接失败重新索引仅对具有唯一值的索引对象有效”)

我尝试过:

 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

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

即我正在寻找的是这样的:

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 文档和 this question但我找不到我要找的东西。提前致谢

最佳答案

您隐含地假设索引的第一个实例应与索引的另一个第一个实例对齐。在这种情况下,请使用 groupby + cumcount 建立每个唯一索引的排序。

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

关于python - 避免数据帧中的重复数据连接/合并/连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49113254/

相关文章:

python - `async for` 的语义 - __anext__ 调用可以重叠吗?

Python shell 脚本

python-3.x - 转置 3D Numpy 数组

windows - 如何在 Windows 上从源代码构建 cx_freeze?

python - Pandas 替换不替换整个字符串

python - 考虑基线值,根据具体条件减去和添加值

Python future : How do I get the json from a future object in Tornado?

python - 在 json 中存储 pandas 数据框时保持列和行顺序

python - pprint 排序字典而不是集合?

python - Pandas.DataFrame.apply 返回 None 值