python - 如何根据 dataframe1 1 中给出的值在两个 pandas 数据帧之间循环以选择要从 dataframe2 中提取的行范围
问题描述
我有两个大数据框,其中包含同一产品的价格。它们的数据框有不同的大小。第一个数据框df1
,每个产品有一个价格,第二个数据框df2
,每个产品有多个价格。我需要从中获取产品和价格,df1
并在 df2 中找到相应的价格范围(-5.0 < df1 < 5.0 的价格)。然后将其提取到第三个数据帧df3
。
这就是我所拥有的:
这是我没有运气尝试的代码:
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]
,但它仍然不起作用。
关于如何进行的任何建议?
解决方案
# 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
推荐阅读
- laravel - Laravel Livewire,如何在动态字段中应用 select2
- javascript - 使用带有反应窗口和粘性列的反应表
- python - 如何解决odoo上的错误time.clock()
- google-bigquery - 如何在 google bigquery 中创建表的克隆
- powershell - 将(字符串)变量设置为等于另一个(字符串)变量,包括修改
- character-encoding - LSTM 模型似乎没有从训练中学习
- python - 有人可以帮我删除输出列表中的空白点吗?我绑定了不同的方法,但似乎没有任何效果:(
- asp.net - 对于 ASP.NET 中的登录屏幕,我是否需要考虑其他任何注意事项?
- pdf - 可编辑的 PDF,相同的内容正在自动填充
- teradata - 如何在 READ_NOS 中使用路径变量(类似的东西)