【发布时间】:2022-01-26 07:50:46
【问题描述】:
环顾四周,但尚未找到解决此问题的方法。抱歉,如果我错过了。
我正在尝试使用值是 numpy 数组的字典创建相当于 pandas 合并或 SQL JOIN 的内容。
以下是示例输入/期望的目标是什么。
Ex 输入:
import numpy as np
dict_1 = {
'col1': np.array(['one', 'two', 'three', 'four']),
'col2': np.array(['item1', 'item2', 'item3','item4'])}
dict_2 = {
'col3': np.array(['two', 'two', 'six', 'seven', 'eight']),
'col4': np.array(['item2', 'item3','item4','item5','item 5'])}
~Ex 期望的输出(更新):~
new_dict = {
'col1': array(['one', 'two', 'two', 'two', 'three', 'four']),
'col2': array(['item1', 'item2', 'item2','item3','item3','item4']),
'col3': array([np.nan, 'two', 'two', np.nan, np.nan]),
'col4': array([np.nan, 'item2', 'item3', np.nan, np.nan, np.nan]),
}
所以这里的目标是该函数将识别dict_1 中的col1 和dict_2 中的col3 之间的匹配,然后返回所有优先级在左侧的匹配。
即,即使没有匹配项,左侧的优先级 == four 也会返回,因为它在 dict_1 中 - 类似于您在以下位置看到的:
- 在 2 个 DataFrames 上的 pandas 合并
how='left' - 两个数据库表上的 sql 中的 LEFT JOIN
当然,我可以将字典转换为 DataFrames 并使用 pandas 合并,但最好不使用 pandas 来解决这个问题。
任何帮助将不胜感激!
谢谢
以下是如何使用 Pandas Merge 实现预期结果
import pandas as pd
import numpy as np
dict_1 = {
'col1': np.array(['one', 'two', 'three', 'four']),
'col2': np.array(['item1', 'item2', 'item3','item4'])}
dict_2 = {
'col3': np.array(['two', 'two', 'six', 'seven', 'eight']),
'col4': np.array(['item2', 'item3','item4','item5','item 5'])}
df1 = pd.DataFrame(dict_1)
df2 = pd.DataFrame(dict_2)
new_df = df1.merge(df2, how='left', left_on='col1', right_on='col3')
new_df
【问题讨论】:
-
能否请您展示如何使用pandas.Dataframe.merge 从您的示例中获得所需的输出。
-
啊,对不起。晚上太晚了,意识到我在预期的输出中犯了一个错误。现在将更新寻找类似 new_df = df1.merge(df2, how='left', left_on='col1', right_on='col3')
-
@Bob - 对此感到抱歉。更新了帖子以显示正确的输出 + 如何使用 pandas 合并完成同样的一般事情。
-
你想要所有四列?您打算将它用于大型阵列还是仅用于小型阵列(例如
-
@Bob - 是的,我需要理想地返回所有列。数组将相当大(在一些最大的用例中,数组内的值超过 10k - 但通常每个数组会有 500 - 1000 个值)。