如何在Python的DataFrame中按条件新增Last_entry列?
实现方案
首先先确认原始数据集的创建代码:
import pandas as pd # 创建数据集 data = { 'team': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C'], 'Run_time': [1, 2, 3, 4, 5, 1, 2, 3, 1, 2, 3, 4], 'Married': ['No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 'No', 'Yes', 'Yes', 'No'], 'Self_Employed': ['No', 'No', 'Yes', 'No', 'No', 'No', 'Yes', 'No', 'No', 'Yes', 'No', 'No'], 'LoanAmount': [123, 128, 66, 120, 141, 52,96,15,85,36,58,89], } df = pd.DataFrame(data)
下面提供三种简洁的实现方式:
方法一:分组对比最大值
通过groupby按team分组,用transform获取每组的Run_time最大值,再将当前行的Run_time与组内最大值对比,相等则标记为1,否则为0:
df['Last_entry'] = df.groupby('team')['Run_time'].transform(lambda x: x == x.max()).astype(int)
方法二:利用排名标记
对每组的Run_time做降序排名,排名为1的行就是该组Run_time最大的行,再将布尔值转为整数:
df['Last_entry'] = df.groupby('team')['Run_time'].rank(ascending=False, method='first').eq(1).astype(int)
注:method='first'是为了处理同一组内出现多个相同最大值的情况,确保只标记第一个出现的最大值行;如果需要标记所有最大值行,可以去掉该参数。
方法三:索引定位赋值
先初始化Last_entry列为0,再找到每组Run_time最大值对应的索引,最后给这些索引位置赋值为1:
df['Last_entry'] = 0 max_indices = df.groupby('team')['Run_time'].idxmax() df.loc[max_indices, 'Last_entry'] = 1
执行任意一种方法后,输出df就能看到新增的Last_entry列符合需求。
内容的提问来源于stack exchange,提问作者NN_Developer
相关产品推荐
相关产品推荐

