说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
连续值的分析主要涉及统计摘要、数据分布分析、相关性分析、趋势分析、假设检验和回归分析等方面。有时我们需要统计数据的连续性,并进行标记,本例我们看看在 pandas 是如何操作的。
数据如下:
import pandas as pd
data = [[1, 2, False],
[2, 3, True],
[3, 4, False],
[5, 6, True],
[6, 7, False],
[6, 7, False],
[6, 7, False]]
df = pd.DataFrame(data, columns=[*'abc'])
df
'''
a b c
0 1 2 False
1 2 3 True
2 3 4 False
3 5 6 True
4 6 7 False
5 6 7 False
6 6 7 False
'''
遍历 c
列,计数 False,遇到 True 停止计数,遍历完,生成新的一列,这个案例生成值为 1,0,1,0,1,2,3。
写一个函数来处理 c 列,设置一个计数器,通过 for 循环对计数器进行赋值,如果连续出现就加一,如果出现 True 就还原为 0。
最后,将调用结果增加到原数据的最后列。
定义处理 Series 的函数如下:
def func(ser: pd.Series) -> list:
value: int = 0
lst: list = []
for v in ser:
if v is True:
value = 0
else:
value += 1
lst.append(value)
return lst
该函数的逻辑如下:
该函数的作用是计算输入序列中连续出现 False 的次数,并将结果存储在列表中返回。每当遇到 True 时,将计数重置为 0,当遇到 False 时,计数加 1。通过追踪连续出现 False 的次数,可以分析连续性的模式或统计连续非 True 值的长度。
最后将这列调用计算增加到原数据:
df.assign(d=df.c.pipe(func))
'''
a b c d
0 1 2 False 1
1 2 3 True 0
2 3 4 False 1
3 5 6 True 0
4 6 7 False 1
5 6 7 False 2
6 6 7 False 3
'''
代码的逻辑是将 DataFrame df 的列 df.c 应用函数 func(注意用 pipe 应用,传入的是整个 Series),计算连续出现 False 的次数,并将结果作为新的一列 'd' 添加到 DataFrame df 中。新的一列 'd' 中的值表示对应行的连续出现 False 的次数。
还有向量化的计算的解决方法,在作者的其他例子中也展示过,不过不太好理解,代码如下:
s = ~df['c'] * 1
df.assign(d=s * (s.groupby((s != s.shift()).cumsum()).cumcount() + 1))
这样就完成了需求。
(完)
更新时间:2024-08-18 16:17:00 标签:pandas python false 标记