【问题标题】:How to loop between two pandas dataframes to select a range of rows to be extracted from dataframe2, based on a value given in the dataframe1 1如何根据 dataframe1 1 中给出的值在两个 pandas 数据帧之间循环以选择要从 dataframe2 中提取的行范围
【发布时间】:2020-02-29 03:08:20
【问题描述】:

我有两个大数据框,其中包含同一产品的价格。它们的数据框有不同的大小。 第一个数据框df1,每个产品有一个价格,第二个数据框df2,每个产品有多个价格。我需要从df1 获取产品和价格,并在 df2 中找到对应的价格范围(-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],但还是不行。

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

【问题讨论】:

  • 请添加一个可重现的例子。

标签: python pandas dataframe


【解决方案1】:
# 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')

# 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

【讨论】:

  • 嗨 Samer,非常优雅的解决方案,没有循环。非常感谢您的帮助。它就像一个魅力。 :)
猜你喜欢
  • 2021-03-20
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多