【问题标题】:How to replace two for loops (for two dataframes) with something more efficient如何用更有效的方法替换两个 for 循环(用于两个数据帧)
【发布时间】:2021-10-14 19:00:40
【问题描述】:

我有两个数据框和一个共享列。我正在尝试根据该列将一个数据帧中的四列分配给另一个(它们尚不存在)。 这大约需要 45 分钟才能运行。有没有更好的方法来做到这一点?

df_1['a'] = ''
df_1['b'] = ''
df_1['c'] = ''
df_1['d'] = ''


for i in range(len(df_1)):
    for j in range(len(df_2)):
        if df_1.loc[i, 'common_col'] == df_2.loc[j, 'common_col']:
            df_1.loc[i, 'a'] = df_2.loc[j, 'a']
            df_1.loc[i, 'b'] = df_2.loc[j, 'b']
            df_1.loc[i, 'c'] = df_2.loc[j, 'c']
            df_1.loc[i, 'd'] = df_2.loc[j, 'd']

【问题讨论】:

    标签: loops for-loop nested


    【解决方案1】:

    如果我理解正确,您希望 .merge 将数据框放在一起。

    如果你有df1:

       c1  c2  common_col
    0   1   2           1
    1   3   4           2
    2   5   6           3
    

    df2:

       a  b  c  common_col
    0  1  2  3           1
    1  3  4  5           3
    

    然后:

    df_out = df1.merge(df2, on="common_col", how="left")
    print(df_out)
    

    打印:

       c1  c2  common_col    a    b    c
    0   1   2           1  1.0  2.0  3.0
    1   3   4           2  NaN  NaN  NaN
    2   5   6           3  3.0  4.0  5.0
    

    【讨论】:

    • 如果公共列名在不同的行上包含不同的值,这会起作用吗?意思是,df_1 的行数比 df_2 多,尽管列名相同且每个数据帧中该列的唯一值相同,但 df_1 的 common_col 中的值与它们出现的顺序不同df_2,df_1 中的值也可能出现多次。
    • 当我尝试这个时,它创建了两组新列 - 一组后缀为 _x,一组后缀为 _y。你知道这是怎么回事吗?
    猜你喜欢
    • 2022-06-14
    • 2022-01-07
    • 2021-08-20
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    相关资源
    最近更新 更多