gpt4 book ai didi

python - 具有长嵌套条件的 pandas 查找

转载 作者:行者123 更新时间:2023-12-01 03:12:15 26 4
gpt4 key购买 nike

我想通过 pandas 在数据框中执行查找。但它将由一系列嵌套的 if else 语句创建,类似于概述 Pandas dataframe add a field based on multiple if statements但我想使用最多 13 个不同的变量。这似乎很快就会导致困惑。是否有一些符号或其他不错的功能允许我在 pandas 中指定如此长的嵌套条件?到目前为止 np.where() http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.where.html可能是我最好的选择。

如果我只匹配所有条件下的相等,是否有捷径?

我是否被迫写出每个条件过滤器?我可以只使用一个表达式来选择生成的(单个)查找值吗?

编辑理想情况下我不想匹配

df.loc[df['column_name'] == some_value]

对于每个值,即。 13* 分类级别数(假设 7)将是很多不同的值;特别是,if df.loc[df['fist'] == some_value][df['second'] == otherValue1]条件组合出现,即它们都是链接的。

编辑

一个最小的例子

df = pd.DataFrame({'ageGroup': [1, 2, 2, 1],
'first2DigitsOfPostcode': ['12', '23', '12', '12'],
'valueOfProduct': ['low', 'medum', 'high', 'low'],
'lookup_join_value': ['foo', 'bar', 'foo', 'baz']})

定义由sql查询生成的查找表,该查询按所有列分组并聚合值(因此由于笛卡尔积,所有值组合都应在查找表中表示。

新记录可能如下所示

new_values = pd.DataFrame({'ageGroup': [1],
'first2DigitsOfPostcode': ['12'],
'valueOfProduct': ['low']})

假设所有条件都需要相等匹配,我怎样才能自动查找所有条件(如果这更容易的话。

我发现了

编辑2

第二个答案似乎很有趣。但是

mask = df.drop('lookup_join_value', axis=1).isin(new_values)
print(mask)
print(df[mask])
print(df[mask]['lookup_join_value'])

不幸的是,查找值只会返回 NaN。

最佳答案

现在我更好地知道您在追求什么,数据框合并可能是一个更好的选择:

IN: df.merge(new_values, how='inner')
OUT: ageGroup first2DigitsOfPostcode lookup_join_value valueOfProduct
0 1 12 foo low
1 1 12 baz low

肯定比我给出的其他答案短!不过,我会保留旧的,以防它激励其他人。

关于python - 具有长嵌套条件的 pandas 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42768086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com