如果 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])
可以在数据帧上使用完全相同的逻辑
我是 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])
可以在数据帧上使用完全相同的逻辑