ユーザー属性の更新時間を短縮するために、データフレームをフィルタリングする必要があります。
+----------+------------+------------+
| userCol1 | dateCol1 | dateCol2 |
+----------+------------+------------+
| user1 | 2020-01-16 | 2019-12-30 |
| user2 | 2019-10-31 | 2020-01-12 |
| user3 | 2019-08-15 | 2019-09-30 |
| user4 | 2019-08-25 | NaN |
+----------+------------+------------+
上記はデータフレームの例です。私はどちらかの最新の日付ことをすべてのユーザーのためにそれをフィルタリングする必要がありますdatecol1
かdatecol2 is <= today-90 days
。上記の例では、上記データフレームをもたらすはずであるuser2
とuser4
処理のためのデータフレームに残さ。
私が書いたコード(そしてテストしていないので、それが機能するかどうかはわかりません)は、データフレームをフィルタリングせず、代わりに全体をループしようとします。これがコードです。
for row in df3.itertuples() :
print(row.username)
print(row.Password_Last_Set)
print(row.Password_Last_forgot)
if row.Password_Last_Forgot is 'NaN' and row.Password_Last_Set <= today.timedelta(days=90) :
print('password expired based on last set, no forgot passwords')
elif row.Password_Last_Forgot is not 'NaN' and row.Password_Last_Forgot > row.Password_Last_Set and row.Password_Last_Forgot <= today.timedelta(days=90) :
print('password expired based on last forgot')
elif row.Password_Last_Forgot is not 'NaN' and row.Password_Last_Forgot < row.Password_Last_Set and row.Password_Last_Set <= today.timedelta(days=90) :
print('password expired based on last set')
ユーザーをループして残りのユーザーに対してアクションを実行する前に、どのようにフィルタリングできますか?
使用boolean indexing
してmax
、最新の日時について:
df[['dateCol1','dateCol2']] = df[['dateCol1','dateCol2']].apply(pd.to_datetime)
cols = ['dateCol1','dateCol2']
df1 = df.loc[df[cols].max(axis=1)<=pd.Timestamp.now() - pd.Timedelta(90, unit='d'), 'userCol1']
print (df1)
2 user3
3 user4
Name: userCol1, dtype: object
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加