Pandas基于DataFrame两列创建Series的代码逻辑解释请求
代码逻辑与问题解答
为什么需要连续定位两列
两个定位操作的作用完全独立,不存在重复定位,两者缺一不可:
- 第一次定位
country列,是为了构造「筛选美国企业」的行过滤条件,属于筛选规则的数据源获取 - 第二次定位
industry列,是为了拿到后续要统计的目标字段,属于统计对象的获取
你看到的「连续定位两列」是pandas链式调用的书写形式,本质是先后执行「行过滤」和「取目标列」两个独立步骤,只是写在了同一行。
代码作用
这段代码最终返回一个长度为2的Series,展示世界500强美国企业中数量最多的前2个行业,以及对应行业的企业数量。
逐段执行逻辑拆解
我们把链式调用拆成独立步骤理解更清晰:
- 执行
f500["country"] == "USA"
取出f500的country列,逐行判断值是否等于"USA",返回和原DataFrame行数一致的布尔Series,值为True就代表该行对应的企业是美国企业 - 执行
f500["industry"][第一步得到的布尔Series]
先取出f500的industry行业列,再用第一步得到的布尔索引过滤,只保留美国企业对应的行业值,得到一个仅包含美国企业行业信息的Series这里还有更规范的等效写法:
f500.loc[f500["country"] == "USA", "industry"],loc写法更推荐用于同时做行过滤+列选择的场景,不容易触发pandas的链式赋值警告 - 执行
.value_counts()
对过滤得到的美国企业行业Series做频次统计,返回新的Series,索引是行业名称,值是对应行业的美国500强企业数量,默认按数量从高到低排序 - 执行
.head(2)
取频次统计结果的前2行,也就是美国企业数量最多的前2个行业的统计结果,赋值给变量industry_usa
内容的提问来源于stack exchange,提问作者LeviScoffie
相关产品推荐
相关产品推荐

