如果 years 列 >=10,则用户个人详细信息应替换为他的 ID (pandas)

if column years is >=10, user personal details should be replaced with his id (pandas)

我是 pandas 的新手。

在这里,我遍历每一行并检查用户的退出日期,如果他的退出日期 >= 10,则他的个人详细信息应替换为他的 ID。

我卡住了,请帮忙。

for edate in pd.to_datetime(df1['EXIT_DATE']):

    rdelt = relativedelta(datetime.today(),edate)

    df1['years'] = rdelt.years

    # its modifying each row in a DataFrame.
    #df1.loc[flag,['first_name','middel_name','email']] = df1['user_id'] 

您可以尝试下面的代码来避免循环:

# Ensure EXIT_DATE dtype is a datetime64
df1['EXIT_DATE'] = pd.to_datetime(df['EXIT_DATE'])

df1['years'] = pd.Timestamp.today().year - df1['EXIT_DATE'].dt.year
df1.loc[df1['years'] >= 10, ['first_name','middle_name','email']] = df['user_id']

++++++++++++++++++++

编辑:

link 添加到@Arvind Kumar Avinash 解释“在数据帧上过滤”的回答中

++++++++++++++++++++

接受@Emi OB评论并添加解释;

您可以使用常用的“<,>,<=,>=”运算符创建 flag/mask,例如

age = pd.Series([20,23,22,19,30])
age>22 # Series([False,True,False,False,True])

因此您可以使用该掩码对所有 True 索引进行操作,即如果我们想要替换所有 age 其中 age>22 (即我们拥有的所有索引' True 值)与值 22,我们只需通过

age = pd.Series([20,23,22,19,30])
mask = age>22 # Series([False,True,False,False,True])
age.loc[mask] = 22
age # pd.Series([20,22,22,19,22])

可以在数据帧上使用完全相同的逻辑