excel多条件计数python

您所在的位置:网站首页 python条件计数 excel多条件计数python

excel多条件计数python

#excel多条件计数python| 来源: 网络整理| 查看: 265

5fdf8db1cb1349544061d07e146d9a5ed1094a51.jpeg?token=c3a7a841cf093af96462126ff35b41e8&s=F21C7E8657A3D8E45A2B826E03007078

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

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

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

前言

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

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

d01373f082025aaf6e7c92d2becea362034f1a02.jpeg?token=22e6cbc4c9bc9cc06c5277e877ce3269&s=0190CD32979149C2425530DB000050B0

pclass:船舱等级survived:是否生还fare:票价sex:性别home.dest:住址如果你看过上一节文章,想必应该理解到,在 pandas 中,不管是数值或是文本的条件统计,本质都是构造条件 bool 列,之后的处理是一样的。

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

案例1:简单需求

"30岁以上的人数"

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

1b4c510fd9f9d72a1407afd09d092032359bbb41.jpeg?token=0170a40c8e80b4938173c5d4cb6141b5

简单使用 countifs 即可注意,第二个参数使用文本(双引号包围),主要是因为需要使用 大于号。这使得函数公式的语义更好pandas中数值条件也很非常容易表达:

d53f8794a4c27d1ee1a245f457f6a568ddc43826.jpeg?token=1a502289208a6063e5aa828c0f71a239&s=B9A87932817248235C5540DE000090B2

行1:df.age >30 构造出"年龄大于30"的 bool 列与 Excel之间的关系

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

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

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

b7003af33a87e950562765fc401b5b45fbf2b413.jpeg?token=9e16a69e44994a59188b3ae3c3c61cb8&s=4950CD1233546DDE905F7E6A0200E078

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

64380cd7912397dd94dc77820da1bab1d1a287bc.jpeg?token=687b06fddeba96dd26c8526d219697af&s=4990CF1A514A4D4B465101DA0000D0B2

df[cond] 相当于 df[df.age > 30]相当于在辅助列上做筛选,把 true 值的行筛选出来!所以你会发现,如果只是执行 df[cond] ,得到的是那些年龄大于30的行如果你熟悉 Excel 的功能,你可能会说:"这不就是智能表格?!"

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

a9d3fd1f4134970a5b05cf0acde9d9cea7865d4e.jpeg?token=8c99b322bc052ca14a38f6f281b8184e&s=E9D0CD1225DBD5C65A50D5CB0000C0B1

创建表格

fcfaaf51f3deb48f8756b701ac3c322f2cf578de.jpeg?token=be38844221535ce4b52dd46fa99c0d85&s=E940CF101F286809467578DB0200D0B2

在表格旁边输入公式注意此时公式中的引用不是单元格地址,而是直接以列名显示这个地方与 pandas 非常相似,这是因为他们都是在表达,你在操作一个有结构的表格当你按下回车,公式自动填充:

a5c27d1ed21b0ef4e1dedf9bbde759dc80cb3eee.jpeg?token=f4484230db63d7df15ec0f330325ce8b&s=C940CD10575849CA4C5D3CDA0300C0B0

其他各种需求

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

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

ac4bd11373f08202adad296e28d8f3ebab641b49.jpeg?token=dd5434d4aa6ee7e5134efff5a97b2686&s=35986C32037048214A7504DB000010B2

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

e61190ef76c6a7efb89b35e79bd9a757f2de665f.jpeg?token=7b9555b56dda4d694a6ba84936c3398f&s=A5906C320B266922487DA4DB0000C0B3

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

86d6277f9e2f07087ac54c788207b09fa801f2ab.jpeg?token=23d1340010d6447b374aa6716574b76b&s=31107D32C530692052E100DB000090B2

有没有发现男性的人数与之前需求的人数很接近?因为刚好男性的平均年龄在30岁左右当然,还是可以直接分组统计的:

203fb80e7bec54e7b53aa8b9d71b93564ec26a68.jpeg?token=97d49a194450661945670e836f1ad8f7&s=3DAC7D32037A44205A7DA1DA000010B3

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

8c1001e93901213f5446623624c43ed72e2e9588.jpeg?token=861470efb9b1950c59f27f339b2fd0ce&s=11B0EC3217084549047DB5DA000080B1

他们都在 S 港口上船,同是三等舱女生获救了,男生遇难了"男女各自年龄最大的人的资料":

71cf3bc79f3df8dc2292eb6cbb327a8d4610284d.jpeg?token=a8384305b31bd82bee52b26ce5a7deaf&s=95B86C32119841C80C75A5DA0000D0B1

他们都是在 S 港口上船,同是一等舱他们都获救了一等舱可能更靠近甲板,逃生更容易最后来一个复杂一点的需求。

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

6a600c338744ebf8e7ce9d78a3dadf2c6159a7e0.jpeg?token=730707c6ceb888e4a9109f9d95b4427f&s=A410EC32119BC5CC586561DB0000D0B3

简单让 pandas 按数据中的年龄,平均划分成4段大概可以看出,男性的生还率低于女性,特别是20到40岁这个年龄段更多针对泰坦尼克号沉船事件数据的详细分析,可以查看 公众号中:数据大宇宙 > 数据分析 > 探索分析 系列文章关于透视表和数据分段,请查看 pandas 专栏 [带你玩转Python数据处理—pandas] 相关文章

总结

本文重点:

pandas 中构造 bool 列的过程,与 Excel 操作智能表格非常相似idxmin、idxmax 可以根据一列值的最小或最大值,获得对应的行索引值

如果希望从零开始学习 pandas ,那么可以看看我的 pandas 专栏。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3