将重复值替换为Null并仅保留最后一个值的实现方法
Pandas:按ID和Date分组后仅保留每组最后一个EoM_Val
可以用Pandas的groupby结合transform方法实现需求,核心思路是对每个ID+Date分组,仅保留该组最后一行的EoM_Val值,其余行替换为Null。
步骤1:构造示例DataFrame
import pandas as pd data = { 'ID': ['AAA', 'AAA', 'BBB', 'BBB'], 'Date': ['2021-06-30', '2021-06-30', '2021-06-30', '2021-06-30'], 'EoM_Val': [3946750, 3946750, 2792182, 2792182], 'Val': [3, 2, 6, 7] } df = pd.DataFrame(data)
步骤2:处理EoM_Val列
# 按ID和Date分组,仅保留每组最后一行的EoM_Val,其余设为Null df['EoM_Val'] = df.groupby(['ID', 'Date'])['EoM_Val'].transform( lambda x: x.where(x.index == x.index[-1], pd.NA) )
代码解释
groupby(['ID', 'Date']):以ID和Date为分组键,将数据划分为多个子组transform:对每个分组执行自定义逻辑,返回与原DataFrame长度一致的结果,保证索引对齐x.where(条件, 替换值):当条件满足时保留原数值,否则替换为pd.NA(Pandas中的Null类型);这里的条件是当前行索引等于分组的最后一个索引,即仅保留每组最后一行的EoM_Val
处理后的结果
ID Date EoM_Val Val 0 AAA 2021-06-30 <NA> 3 1 AAA 2021-06-30 3946750 2 2 BBB 2021-06-30 <NA> 6 3 BBB 2021-06-30 2792182 7
注:如果使用旧版本Pandas,
pd.NA可替换为np.nan(需提前导入numpy)
内容的提问来源于stack exchange,提问作者ImNotSureAboutStats
相关产品推荐
相关产品推荐

