You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas多列数据处理:计算各街区True列表占比的方法

解决Pandas计算街区True值占比的问题

嘿,我来帮你搞定这个问题!你碰到的AttributeError: 'Series' object has no attribute 'True',原因很直接:True和False是Python的保留关键字,不能用.True/.False这种属性访问的方式来获取DataFrame的列。Pandas的属性访问只支持符合Python标识符规则的列名(比如不能是关键字、不能带空格),所以得改用方括号[]来访问这些列。

另外,你的示例数据里有个小bug:{ 'neighbourhood': 'Bromley', False: Bromley, True: 0 }这一行的False值写了Bromley(应该是数字,我下面假设是1890,你可以换成实际数值)。

下面是完整的修正方案:

1. 先修正并构造正确的DataFrame

import pandas as pd

data = [
    { 'neighbourhood': 'Barking and Dagenham', False: 795, True: 0 },
    { 'neighbourhood': 'Barnet', False: 6451, True: 0 },
    { 'neighbourhood': 'Bexley', False: 704, True: 0 },
    { 'neighbourhood': 'Brent', False: 13681, True: 576 },
    { 'neighbourhood': 'Bromley', False: 1890, True: 0 }  # 修正此处的数值错误
]
df = pd.DataFrame(data)

2. 计算True值占比的正确代码

用方括号访问列,先计算总数量,再算占比(注意处理总数量为0的情况,避免除以0报错):

# 计算每个街区的总列表数
df['total'] = df[True] + df[False]
# 计算True值的占比,并用fillna(0)处理总数量为0的情况
df['percent_true'] = (df[True] / df['total']) * 100
df['percent_true'] = df['percent_true'].fillna(0)

3. 更简洁的写法(省略total列)

如果你不需要保留total列,可以直接一行完成计算,还能顺便保留两位小数让结果更美观:

df['percent_true'] = (df[True] / (df[True] + df[False])) * 100
df['percent_true'] = df['percent_true'].fillna(0).round(2)

运行后,你就能得到每个街区的True值占比了。比如Brent街区的占比大概是4.05%,其他街区因为True值为0,占比就是0。


内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:35:12