python - 根据用户输入的不同条件过滤熊猫
问题描述
我正在尝试根据用户的输入过滤 df。从图片中可以看到,我从 4 个下拉菜单中接收输入。每个下拉菜单都是unique()
来自 DF 的一列,但是,我将单词添加"All"
到下拉菜单的列表顶部以禁用该特定过滤器并显示没有该过滤器的 DF。
这就是构建每个菜单列表的方式
def unique(df,col_nme,**kwargs):
lst_nme=df[col_nme].unique()
lst_nme=list(lst_nme)
lst_nme.insert(0,"All")
return lst_nme
然后我将它们设置为显示(使用streamlit)并为熊猫构建过滤器
lst_rprt_status = unique(df, "Reporting Status")
rprt_status = st.sidebar.selectbox("Reporting Status", lst_rprt_status)
lst_src = unique(df, "Source")
src = st.sidebar.selectbox("Source", lst_src)
lst_cntrct_type = unique(df, "Contract Type")
cntrct_type = st.sidebar.selectbox("Contract Type", lst_cntrct_type)
lst_country = unique(df, "Country")
country = st.sidebar.selectbox("Country", lst_country)
filt_status = df["Reporting Status"] == rprt_status
filt_src = df["Source"] == src
filt_cntrct_type = df["Contract Type"] == cntrct_type
filt_country = df["Country"] == country
如果所有名称都返回"All"
,即用户加载页面,这是一个非常简单的 if 语句,我只显示完整的 DF 但是,如果我开始从菜单中选择要过滤的值而其他菜单仍处于“全部" 或者我想"All"
在选择它之后将其更改为,那么我在为 DF 构建组合过滤器时遇到问题。我尝试阅读有关 df.query 的信息,但我会遇到同样的问题。
所以基本上我在这里尝试做的是有一种过滤器形式,如 bleow:
df_filtered = df[(df["Reporting Status"] == "Pending") &
(df["Source"] == "All") &
(df["Contract Type"] == "CSA") &
(df["Country"] == "Egypt")]["CPM"]
具有删除特定行的能力,如果它的关联条件== "All"
,在上面的例子中,将是df["Source"] == "All"
或添加它不是当它不是。
我还尝试使用字符串操作构建完整的句子,但最终没有成功,我不想为所有会产生结果的组合运行 if 语句,除非它真的是唯一的希望
很抱歉这篇文章很长,但我试图尽可能彻底
解决方案
你能试试这个吗?在这里,我假设文本All
保留用于选择所有行。
我正在做的是首先检查所选输入是否在唯一列表中,如果不是,那么我通过创建True
布尔值来选择所有行。
msk1 = df["Reporting Status"] == rprt_status if rprt_status in lst_rprt_status else True
msk2 = df["Source"] == src if src in lst_src else True
msk3 = df["Contract Type"] == cntrct_type if cntrct_type in lst_cntrct_type else True
msk4 = df["Country"] == country if country in lst_country else True
df_filtered = (df[msk1 & msk2 & msk3 & msk4])["CPM"]
推荐阅读
- python - 我想使用 python 将数据从 word 表移动到 excel 表但不能这样做,当 Table 中有子列时我会遇到错误
- lua - 波浪号本身在 Lua 中是什么意思?
- r - 如何提取列表的每个第 n 个元素
- python - 通过分箱聚合间隔数据以创建时间序列
- ruby-on-rails - Rails Active Storage 可以映射到数据库中预先存在的图像表吗?
- python - 需要帮助使用 selenium python 和 2captcha 创建 Outlook 帐户 - Funcaptcha
- javascript - Laravel - 在 Javascript / React 组件中使用翻译
- r - 如何计算 R 中出现红色国王或王后的概率?
- r - 在 Ubuntu 上的 R Shiny App 中读取环境变量的最简单方法是什么?
- postgresql - postgresql 动态函数