如何针对其他数据框的行查询python数据框?

Posted

技术标签:

【中文标题】如何针对其他数据框的行查询python数据框?【英文标题】:How to query python data frame against row of other data frame? 【发布时间】:2022-01-01 03:53:44 【问题描述】:

所以我有一个 100 行的数据框 (Df1)。我还有一个包含 1 行的数据框(df2)。对于每个数据框,一行代表一个属性。有问题的列是“NIY”和“购买价格”。我想编写一个查询 DF1 的函数,以显示 NIY 在 DF2 的 0.1 以内且购买价格在 DF2 的 2,000,000 以内的结果。

DF1 包含多个列,其中包含“NIY”和“购买价格”。

Purchase_Price NIY Purchaser
230000000 0.15 GS
30000000 0.08 JKK

见下方代码

df1 = pd.read_csv('CopyTransactions.csv', header=3)

df2 = 'Purchase_Price': [25300000], 'NIY': [0.078]
df2 = pd.DataFrame(data=df2)
df1.query('Purchase_Price > 1000000 & NIY > 0.09')

df1.query('NIY within range g.0['NIY'] + or - 0.01 
     & Purchase_price within range g.0['Purchase_Price'] + or - 2,000,000)

代码一直工作到底部,我想弄清楚如何正确编码底部。 (底部代码中的 0 表示索引 0/第一行)

谢谢!

【问题讨论】:

“我也有一个包含 1 行的数据框 (df2)”,但 df2 这里有 2 行。此外,我们没有您的 csv 文件 'CopyTransactions.csv'。您正在查询名为df 的数据框,但未声明df。如果您需要帮助,您需要提供足够的代码和数据来重现您的问题 接下来,我不会在您的列标题中添加空格。使用下划线。即df2 = 'Purchase_Price': [25300000, 34400000], 'NIY': [0.078, 0.11]。这样,df2.query('Purchase_Price > 1000000 & NIY > 0.09') 就可以工作了 “我想编写一个函数来查询 DF1 以显示 NIY 在 DF2 的 0.1 范围内的结果”。那你为什么放+ or - 0.02 谢谢,我会编辑的。本质上,我希望能够在一个范围内查询,而不是 > 或 明白了。建立 df1 的小样本数据集(就像您为 df2 所做的那样) 【参考方案1】:

query,你可以试试:

>>> df1.query("@df2.Purchase_Price.iat[0]-2000000 <= Purchase_Price <= @df2.Purchase_Price.iat[0]+2000000 and @df2.NIY.iat[0]-0.1 <= NIY <= @df2.NIY.iat[0]+0.1")

   Purchase_Price   NIY Purchaser
2        23500000  0.08       FOO

【讨论】:

【参考方案2】:

这只是过滤/切片数据框的问题。

我会将 df2 中的值存储为变量。然后可以使用pandas.between()

import pandas as pd


df1 = 'Purchase_Price': [23000000, 30000000, 26300000], 
       'NIY': [0.15, 0.08, 0.069],
       'Purchaser': ['GS','JKK','JJK']
df1 = pd.DataFrame(data=df1)

df2 = 'Purchase_Price': [25300000], 'NIY': [0.078]
df2 = pd.DataFrame(data=df2)


price_check = df2.iloc[0]['Purchase_Price']
niy_check = df2.iloc[0]['NIY']

price = 2000000
niy = 0.01

df = df1[(df1['Purchase_Price'].between(price_check - price, price_check + price)) 
     & (df1['NIY'].between(niy_check - niy, niy_check + niy))]

输出:

print(df)

   Purchase_Price    NIY Purchaser
2        26300000  0.069       JJK

在函数中:

import pandas as pd


def filter_df(df1, df_check, price_thresh, niy_thresh):
    price_check = df_check.iloc[0]['Purchase_Price']
    niy_check = df_check.iloc[0]['NIY']
    
    df = df1[(df1['Purchase_Price'].between(price_check - price_thresh, price_check + price_thresh)) 
     & (df1['NIY'].between(niy_check - niy_thresh, niy_check + niy_thresh))]
    
    return df

df = 'Purchase_Price': [23000000, 30000000, 26300000], 
       'NIY': [0.15, 0.08, 0.069],
       'Purchaser': ['GS','JKK','JJK']
df = pd.DataFrame(data=df)

df_check = 'Purchase_Price': [25300000], 'NIY': [0.078]
df_check = pd.DataFrame(data=df_check)


new_df = filter_df(df, df_check, price_thresh=2000000, niy_thresh=0.01)

【讨论】:

太好了,谢谢!我不知道之间的功能。干杯

以上是关于如何针对其他数据框的行查询python数据框?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中获取熊猫数据框的行列表? [复制]

如何从数据库查询中填充组合框?

根据其他列将数据框的一列转换为numpy数组或张量

如何在其他四个数据框的列中检查一个数据框列是不是可用?

如何将数据框的几列与其其他列进行比较

如何在R中的数据框的其他行中查找元素