DT | 21 年 1 月 2 日 | 2/2/21 | 21 年 3 月 2 日 | 21 年 4 月 2 日 | 21 年 5 月 2 日 | 21 年 6 月 2 日 | 21 年 7 月 2 日 | 出勤(python中的預期輸出) |
---|---|---|---|---|---|---|---|---|
桑 | 真的 | 真的 | 真的 | 真的 | 真的 | 真的 | 真的 | 21 年 1 月 2 日 - 21 年 7 月 2 日 |
大學教師 | 真的 | 真的 | 錯誤的 | 真的 | 真的 | 真的 | 真的 | 1/2/21 -2/2/21,4/2/21-7/2/21 |
山姆 | 錯誤的 | 真的 | 真的 | 錯誤的 | 真的 | 真的 | 真的 | 2/2/21 - 3/2/21,5/2/21-7/2/21 |
窩 | 錯誤的 | 錯誤的 | 真的 | 錯誤的 | 真的 | 真的 | 錯誤的 | 3/2/21,5/2/21 - 6/2/21 |
我想使用熊貓添加考勤列
uj5u.com熱心網友回復:
我從以前的答案開始,以獲取“出勤”列中的日期串列。
df['Attendance'] = [df.columns[(df.iloc[i] == True)].tolist()) for i in range(len(df.Dt)]
現在,我使用 pandas deltas(時間差異)來查找連續天數,只提取每個連續天數的第一個和最后一個,并以正確的格式列印出來:
def get_consecutives(dates):
consecutives = []
delta_1day = pd.Timedelta('1d')
while len(dates) > 1:
if dates[1] - dates[0] == delta_1day:
consecutives.append(dates.pop(0))
else:
break
consecutives.append(dates.pop(0))
return consecutives
def all_days(dates):
total = []
while dates:
total.append(get_consecutives(dates))
formatted_total = ', '.join(['-'.join((range[0].strftime('%d/%m/%y'), range[-1].strftime('%d/%m/%y'))) if len(range) > 1
else range[0].strftime('%d/%m/%y') for range in total])
return formatted_total
最后,我將創建一個函式將所有前面的內容映射到“出勤”列:
def mapping(list_of_dates):
dates = pd.to_datetime(list_of_dates, dayfirst=True,).to_list()
return all_days(dates)
df['Attendance'] = df['Attendance'].map(mapping)
uj5u.com熱心網友回復:
歡迎并感謝您對這個美好的“練習”!;)
這是我能做的最好的。
我使用串列理解遍歷每一行.iloc[]
,并檢查哪個.columns
是/是True
,然后是''.join()
結果,使它們成為一個串列,.tolist()
以便能夠分配給新列。
df['Attendance'] = [','.join(df.columns[(df.iloc[i] == True)].tolist()) for i in range(len(df.Dt))]
df
指數 | DT | 21 年 1 月 2 日 | 2/2/21 | 21 年 3 月 2 日 | 21 年 4 月 2 日 | 21 年 5 月 2 日 | 21 年 6 月 2 日 | 21 年 7 月 2 日 | 出勤率 |
---|---|---|---|---|---|---|---|---|---|
0 | 桑 | 真的 | 真的 | 真的 | 真的 | 真的 | 真的 | 真的 | 1/2/21,2/2/21,3/2/21,4/2/21,5/2/21,6/2/21,7/2/21 |
1 | 大學教師 | 真的 | 真的 | 錯誤的 | 真的 | 真的 | 真的 | 真的 | 1/2/21,2/2/21,4/2/21,5/2/21,6/2/21,7/2/21 |
2 | 山姆 | 錯誤的 | 真的 | 真的 | 錯誤的 | 真的 | 真的 | 真的 | 2/2/21,3/2/21,5/2/21,6/2/21,7/2/21 |
3 | 窩 | 錯誤的 | 錯誤的 | 真的 | 錯誤的 | 真的 | 真的 | 錯誤的 | 3/2/21,5/2/21,6/2/21 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/491292.html