程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 Pandas 中过滤多个值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 Pandas 中过滤多个值?

开发过程中遇到在 Pandas 中过滤多个值的问题如何解决?下面主要结合日常开发的经验,给出你关于在 Pandas 中过滤多个值的解决方法建议,希望对你解决在 Pandas 中过滤多个值有所启发或帮助;

我有一个简单的数据框,如何显示购买了产品 A 和 B 但没有购买产品 C 的客户的 customer_ID,按客户 ID 升序排列。

在 Pandas 中过滤多个值

解决方法

尝试使用 groupbyfilter

out = df.groupby('customer_id').\
     filter(lambda x : pd.Series( ['A','B']).isin(x['product_n']).all() \
                        & (~x['product_n'].isin(['C']).any()))
,

您可以为 'A','B' 创建一个集合,并检查该集合是 product_n 的 groupby 的结果的子集。还要检查 C 是否不在 product_n 中。这两者的组合将是 True 或 False。然后仅过滤掉 True 以获取购买了产品 'A''B' 而不是 'C' 的客户 ID。

这是我的实现方式。

import pandas as pd
df = pd.DataFrame({'cust_id':[1,1,2,3,3],'prod_nm':['A','B','A','C','D']})
print (df)
ab = {'A','B'}
dfs = df.groupby('cust_id')['prod_nm'].apply(lambda x: (('C' not in x.tolist()) & (ab.issubset(x))))
#
print (dfs.loc[dfs])

这会给你:

cust_id
1    True

如果您正在为此寻找列表推导式以便将它们放入列表中,那么您可以这样做:

dfx = [k for k,v in df.groupby('cust_id')['prod_nm'].apply(set).items() if ab.issubset(v) and 'C' not in v]

print (dfx)

这样做的结果是:

[1]

对于更新后的 DataFrame,结果如下:

   cust_id prod_nm
0        1       A
1        1       B
2        2       A
3        2       B
4        2       C
5        3       A
6        3       A
7        3       B
8        3       D

使用 dfs.iloc 的结果:

cust_id
1    True
3    True
Name: prod_nm,dtype: bool

使用列表理解的结果

[1,3]
,

您可以使用 pandas.DataFrame.groupbypandas.core.groupby.SeriesGroupBy.uniquepandas.Series.apply

(df.groupby("customer_id")["product_n"].unique()
    .apply(lambda x: 'A' in x and 'B' in x and not 'C' in x))

大佬总结

以上是大佬教程为你收集整理的在 Pandas 中过滤多个值全部内容,希望文章能够帮你解决在 Pandas 中过滤多个值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: