Как l oop между двумя pandas фреймами данных, чтобы выбрать диапазон строк, которые будут извлечены из фрейма данных2, на основе значения, указанного в фрейме данных 1 - PullRequest
1 голос
/ 28 февраля 2020

У меня есть два больших фрейма данных с ценами на один и тот же продукт. У них фреймы данных имеют разные размеры. Первый фрейм данных df1 имеет одну цену за продукт, второй фрейм данных df2 имеет несколько цен на продукт. Мне нужно получить продукт и цену от df1 и найти соответствующий диапазон цен (-5,0 <цена от df1 <5,0) в df2. Затем извлеките это в третий фрейм данных <code>df3.

  1. Вот что у меня есть:

    enter image description here

  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], но она все еще не работает.

Любой совет, как поступить?

1 Ответ

1 голос
/ 28 февраля 2020
# 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-join-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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...