我现在有一个dataframes的字典:
df_dict = {'apple': a_df, 'bees': b_df, 'food': c_df, 'yum': d_df}
每个dataframe都有嵌入其中的唯一主键。每个df的主键使用以下方法创建:df[p_k] = df[a] + df[b] + df[c]
df_dict['apple']
a b c d p_k
9 5 3 4 953
3 6 4 9 364
7 6 5 1 765
df_dict['bees']
a b c d p_k
9 5 3 2 953
df_dict['food']
a b c d p_k
7 6 5 3 765
1 2 1 7 121
df_dict['yum']
a b c d p_k
3 6 4 0 364
1 2 1 8 121
我们的目标是以一种计算效率高的方式(可能吗?)合并p_k上的所有 Dataframe 。每个p_k在不同的 Dataframe 中有恰好1个匹配对。匹配的p_k可以在dict中的任何 Dataframe 中找到。
上例的最终目标是如下所示
final_df
a b c d d_y p_k
9 5 3 4 2 953
3 6 4 9 0 364
1 2 1 7 8 121
7 6 5 1 3 765
我对.merge函数有一个基本的了解,但我正在寻找一种有效的搜索方法,因为真实的的问题是一个有30个 Dataframe 的dict,每个 Dataframe 有70行。
2条答案
按热度按时间nhn9ugyo1#
IIUC你想在合并两个 Dataframe 时保留第一个出现的行吗?如果是这样的话,你可以在每次连接两个 Dataframe 时对 Dataframe 值使用
functools.reduce
,并使用drop_duplicates
删除重复的 Dataframe (默认情况下保留第一个值keep='first')现在你还想保留
d
列。为此,你可以做的是再次减少,但这一次drop_duplicates基于除d
之外的所有列,在这种情况下,删除p_k
就足够了,并保留最后一个值。然后合并这两个简化的 Dataframe 。代码如下所示:
v440hwme2#
试试这样的方法:
输出: