如何针对其他数据框的行查询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数据框?的主要内容,如果未能解决你的问题,请参考以下文章