有没有更pythonic的方式实现条件计数,生成Pandas DataFrame的count列?
你要实现的是对vals列相同值按出现顺序生成从1开始的递增序号,直接用pandas内置的分组累计计数方法就能实现,全程不用手动写for循环,代码非常简洁:
import pandas as pd val = [1, 1, 1, 1, 2, 3, 4, 4, 5, 5, 5, 6, 7, 7, 7, 7] df = pd.DataFrame(val, index = pd.date_range("2021-05-30", freq="D", periods=len(val)), columns=['vals']) # 核心代码,仅一行生成count列 df['count'] = df.groupby('vals').cumcount() + 1
运行后生成的count列和你用循环得到的结果完全一致。
这里的groupby('vals')会把所有vals值相同的行归为同一组,cumcount()方法会返回每组内的行顺序编号(默认从0开始计数),加1后刚好得到你需要的从1开始的序列。相比手写循环的方案,这个方法是pandas优化过的向量化操作,数据量越大性能优势越明显。
内容的提问来源于stack exchange,提问作者jgg
相关产品推荐
相关产品推荐

