python - 从熊猫数据框中提取条件单元格值的 Pythonic 方法是什么
问题描述
我的数据框new_df
包括 3 列:“姓名”、“性别”和“总计”。我需要根据名称和性别的组合从总列中提取值。
name gender Total
357328 Barbara F 3114462
357329 Patricia F 3846693
357330 Betty F 1138056
357331 Shirley F 1075104
357332 Carol F 2054088
my_name = 'Betty'
new_df[(new_df.name == my_name) & (new_df.gender == 'F')]['Total'])
此代码有效返回正确的值,1138056
但我确信有更好的方法来获得结果。
解决方案
您可以通过掩码和列名boolean indexing
与过滤器结合使用,输出为:DataFrame.loc
Series
my_name = 'Betty'
s = new_df.loc[(new_df.name == my_name) & (new_df.gender == 'F'), 'Total']
print (s)
357330 1138056
Name: Total, dtype: int64
然后如果匹配至少一个值并且需要先选择:
print (s.values[0])
1138056
print (s.iloc[0])
1138056
print (s.iat[0])
1138056
或者如果可能没有匹配值可以使用next
with iter
,在哪里可以设置默认值:
print (next(iter(s), 'no match'))
1138056
my_name = 'John'
s = new_df.loc[(new_df.name == my_name) & (new_df.gender == 'F'), 'Total']
print (next(iter(s), 'no match'))
no match
推荐阅读
- docker - OWASP ZAP DOCKER - 扫描 url 列表
- python-3.x - Pytest:失败测试的拆解
- c# - 为什么不能隐式实现非公共接口成员?
- sql - 加入 2 个表,但结果中存在条件列中的所有值
- reactjs - 有没有办法避免使用 Tailwind 清除特定库?
- javascript - 从另一个域保存的 IndexedDB 中读取数据
- java - 使用 mockito [Spring-Boot] 测试 void 函数 try/catch 块
- reactjs - `react-hook-form` 在空输入时显示错误消息
- oracle - 子查询中的 Where 子句
- ruby-on-rails - 将 Rails 应用程序打包为 RPM 的 Rails 构建步骤