如何基于Pandas实现分类型整数DataFrame的仅变化检测类梯度计算
分类数据的变化检测(替代diff的扁平化结果)
你不需要特意将数据转为分类类型也能实现需求,当然转分类后也能处理,下面提供两种可行方案:
方案一:直接生成0/1变化标记(推荐)
利用diff()计算相邻值的差值,再通过判断差值是否非0来标记变化(1=变化,0=未变化),步骤简洁高效:
import pandas as pd # 初始化你的DataFrame mydf = pd.DataFrame([[0,0,0,1,0,2,2,5,2,4], [0,1,0,0,2,2,4,5,3,3], [1,1,1,1,2,2,0,4,4,4]]) # 按行计算相邻列的变化标记 change_df = mydf.diff(axis=1).ne(0).astype(int) # 将第一列的缺失值(无前置列)填充为0 change_df = change_df.fillna(0) print(change_df)
运行后会得到一个全为0和1的DataFrame,其中1表示当前列与前一列的分类值发生了变化,0表示未变化。
方案二:转为分类数据后处理
如果一定要先让Pandas识别为分类数据,也可以先转换类型再执行类似逻辑:
# 将DataFrame转为分类类型 mydf_cat = mydf.astype('category') # 计算变化标记,逻辑和方案一一致 change_df_cat = mydf_cat.diff(axis=1).ne(0).astype(int) change_df_cat = change_df_cat.fillna(0) print(change_df_cat)
本质上分类数据的diff()是基于类别编码的差值计算,最终还是通过判断是否非0来标记变化,因此方案一更直接。
内容的提问来源于stack exchange,提问作者Whitehot
相关产品推荐
相关产品推荐

