试图保持这个相对简单,但让我知道,如果你需要更多的信息。
我有两个字典,每个字典由三个 Dataframe 组成,它们通过循环产生,然后添加到字典中。它们有共同的键['XAUUSD','EURUSD','GBPUSD']:
贸易法令
{'XAUUSD': df_trades_1
'EURUSD': df_trades_2
'GBPUSD': df_trades_3}
价格_法令
{'XAUUSD': df_prices_1
'EURUSD': df_prices_2
'GBPUSD': df_prices_3}
我想合并最近时间戳上的表,以生成3个新的 Dataframe ,这样XAUUSD交易 Dataframe 将与相应的XAUUSD价格 Dataframe 合并,依此类推
我已经能够使用以下语句将 Dataframe 连接到循环中:
df_merge_list = []
for trades in trades_dict.values():
for prices in prices_dict.values():
df_merge = pd.merge_asof(trades, prices, left_on='transact_time', right_on='time', direction='backward')
df_merge_list.append(df_merge)
然而,这产生了9个 Dataframe 的列表,XAUUSD交易+XAUUSD价格,XAUUSD交易+EURUSD价格和XAUUSD交易+GBPUSD价格等。
有没有办法只连接那些键相同的 Dataframe 呢?我假设它应该是这样的:if trades_dict.keys() == prices_dict.keys():
df_merge_list = []
for trades in trades_dict.values():
for prices in prices_dict.values():
if trades_dict.keys() == prices_dict.keys():
df_merge = pd.merge_asof(trades, prices, left_on='transact_time', right_on='time', direction='backward')
df_merge_list.append(df_merge)
但我得到的结果和上面的一样
我接近了吗?我怎样才能对所有仪器做到这一点,并只产生我需要的3个输出?任何帮助都是感激之情
先谢了
2条答案
按热度按时间xwbd5t1u1#
问题中发布的代码出现了什么错误?
1.嵌套for循环创建笛卡尔积
外循环中的3次迭代乘以内循环中的3次迭代= 9次迭代
trades_dict.keys() == prices_dict.keys()
的结果在所有9次迭代中均为True
dict_a_all_keys == dict_b_all_keys
与dict_a_key_1 == dict_b_key_1
不同。因此,您可以遍历字典的键,并检查它们是否在嵌套循环中匹配,如下所示:nhhxz33t2#
您需要以可重现的形式提供带有正确列名的确切 Dataframe ,但您可以使用如下字典:
这将连接两个 Dataframe ,使它们在同一个键下可用:
你可能需要一些错误检查,以防你的键不匹配,或者连接的类型(左,右,内部等)取决于你的列,但这是它的要点。