首页 > 解决方案 > 如何根据 dataframe1 1 中给出的值在两个 pandas 数据帧之间循环以选择要从 dataframe2 中提取的行范围

问题描述

我有两个大数据框,其中包含同一产品的价格。它们的数据框有不同的大小。第一个数据框df1,每个产品有一个价格,第二个数据框df2,每个产品有多个价格。我需要从中获取产品和价格,df1并在 df2 中找到相应的价格范围(-5.0 < df1 < 5.0 的价格)。然后将其提取到第三个数据帧df3

  1. 这就是我所拥有的:

    在此处输入图像描述

  2. 这是我没有运气尝试的代码:

    df3 = pd.DataFrame()
    for index, row in df1.iterrows():
        pr1 = float(row['price'])
        np1 = (row['product'])
        npd = MD + 2
        npu = MD - 2    
    for index, row in df2.iterrows():
        np2 = (row['product1'])
    
        if np2L == np1:
           df3 = df2[(df2.price1 <= npd) & (df2.price1 <= npu)]
           …
    

我还将最后一行替换为: df3 = df2.ix[npu:npd],但它仍然不起作用。

关于如何进行的任何建议?

标签: pythonpandasdataframe

解决方案


# set index of df1 copy to product (since it is unique)
df1_c = df1.copy().set_index('product')

# join df2 and df1_c on df2.product1 = df1_c.product
df3 = df2.copy().join(other=df1_c, on='product1')

df2-加入-df1

# select rows of df3 where absolute difference between price1 and price <= 5
df3 = df3[ abs(df3.price1-df3.price) <= 5.0 ].reset_index().drop(['index', 'price'], axis=1)
df3

在此处输入图像描述


推荐阅读