统计人数 python_懂Excel轻松入门Python数据分析包pandas(二十):数值条件统计

21b5be2e0fc10177ef41486e8478a63b.png

此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd

转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的)

经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死。后来才发现,原来不是 Python 数据处理厉害,而是他有数据分析神器—— pandas

前言

上一节我们重点介绍了针对文本条件的统计方式,这次来把数值相关的讲解一下,并且用一个 Excel 操作思维带你理解 pandas 的运算逻辑。

继续使用泰坦尼克号沉船事件的乘客名单作为例子:

99f072af459005f3e1329aa34d1d6131.png
  • pclass:船舱等级
  • survived:是否生还
  • fare:票价
  • sex:性别
  • home.dest:住址

如果你看过上一节文章,想必应该理解到,在 pandas 中,不管是数值或是文本的条件统计,本质都是构造条件 bool 列,之后的处理是一样的。

废话少说,直接看各种复杂需求!


案例1:简单需求

"30岁以上的人数"

先看看 Excel 函数公式的做法:

fda65107cf26542c8335e7315c5eac30.png
  • 简单使用 countifs 即可
  • 注意,第二个参数使用文本(双引号包围),主要是因为需要使用 大于号。这使得函数公式的语义更好

pandas 中数值条件也很非常容易表达:

1344b12780dc94e1f4e28fc41ef0b35a.png
  • 行1:df.age >30 构造出"年龄大于30"的 bool 列

90b08cdd373ae12058012f605514214c.png

与 Excel之间的关系

你会发现,其实 pandas 中的运算操作,与 Excel 函数公式的运算是非常相似(数组公式更相似),pandas 的操作就像你在第一行写了一个处理逻辑公式,他就自动为你把逻辑公式复制一整列。

不知道我说啥?看看下面的 Excel 操作演示,来实现"30岁以上的人数":

代码 df.age >30 相当于如下操作:

9223ee905105db5d556938efa6fdf427.png
  • pandas 代码, df.age >30 ,构造出条件 bool 列,过程如上
  • 在数据旁边新增一列,直接执行 C2 单元格是否大于30,结果是一个 bool 值
  • 由于 pandas 代码是直接指定 年龄 列是否大于30,因此相当于自动把 E2 单元格的公式复制下去

此时,代码 df[cond] ,相当于如下操作:

fb1774570d840b1e41bfb189aae1b2be.png
  • df[cond] 相当于 df[df.age > 30]
  • 相当于在辅助列上做筛选,把 true 值的行筛选出来!
  • 所以你会发现,如果只是执行 df[cond] ,得到的是那些年龄大于30的行

如果你熟悉 Excel 的功能,你可能会说:"这不就是智能表格?!"

是的,智能表格更能体现,如下:

1f39ddaa366f6b4efd763b2a83a16d77.png
  • 创建表格
1b9885d35838553dd5c1d783b933c768.png
  • 在表格旁边输入公式
  • 注意此时公式中的引用不是单元格地址,而是直接以列名显示
  • 这个地方与 pandas 非常相似,这是因为他们都是在表达,你在操作一个有结构的表格

当你按下回车,公式自动填充:

1fe4b40e0d8551be066c026697139964.png

bb423b4e73d11a51e8489260a7a4ae66.png

其他各种需求

当你理解了上面的思路,那么只要你熟悉 pandas 各种构造 bool 列的技巧,各种需求基本难不倒你。

"30岁以上 男女的人数":

735c8392205aef1735a3505ae978ab8b.png

一个个写,太麻烦了,直接条件筛选,分组统计:

cd0e927a56b9655a3d82b2bfd6c3418e.png

"男女高于各自性别的平均年龄的人数"

cd606fa675ebc0aacaa6536d1a3538e6.png
  • 有没有发现男性的人数与之前需求的人数很接近?因为刚好男性的平均年龄在30岁左右

当然,还是可以直接分组统计的:

4037aa38131d0e66713d1521a24d747c.png

"男女各自年龄最小的人的资料":

2a2f83c8923178109905e640189ea805.png
  • 他们都在 S 港口上船,同是三等舱
  • 女生获救了,男生遇难了

"男女各自年龄最大的人的资料":

57cfb0e78d052fc8220883afd0c12f4d.png
  • 他们都是在 S 港口上船,同是一等舱
  • 他们都获救了
  • 一等舱可能更靠近甲板,逃生更容易

最后来一个复杂一点的需求。

"看看各个年龄段,男女的生还情况":

58a01d76275b471e18dccd93aec76dfc.png
  • 简单让 pandas 按数据中的年龄,平均划分成4段
  • 大概可以看出,男性的生还率低于女性,特别是20到40岁这个年龄段
  • 更多针对泰坦尼克号沉船事件数据的详细分析,可以查看 公众号中:数据大宇宙 > 数据分析 > 探索分析 系列文章

关于透视表和数据分段,请查看 pandas 专栏 [带你玩转Python数据处理—pandas] 相关文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值