iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
自我挑戰組

商業數據分析應用系列 第 9

[Day9] 使用value_counts()計算指定欄位數量

  • 分享至 

  • xImage
  •  

Day Of Week(DoW)

今天要來解決與星期有關的問題,首先來看三個月以來哪一天租借的次數是最多的。

df1[mask_5]['day_of_the_week'].value_counts()

##
3    73675
4    68570
2    65054
5    64821
6    59573
1    50303
7    37219
Name: day_of_the_week, dtype: int64

週間的使用頻率高,以禮拜三次數最多。
發現這個好用的函數value_counts(),自動幫你分類計算還降冪排序(讚)
不然本來是用sum()一個一個條件輸的XD

接著來看使用者喜歡在哪個時段租借(早上/下午/晚上),使用value_counts()排序的時候,發現之前改成datetime形式的時候忘記更改format,造成程式誤判我日期年月日的排序方式,修正為以下:
(format要寫原本你日期的格式,包含-或/之類的符號!)

data['started_at']=pd.to_datetime(data['started_at'],format="%d-%m-%Y %H:%M")
data['ended_at']=pd.to_datetime(data['ended_at'],format="%d-%m-%Y %H:%M")

設定凌晨/早上/下午/晚上時段,再於原表格加一欄只顯示時間的。
凌晨 00:00~05:59
早上 06:00~11:59
下午 12:00~17:59
晚上 18:00~24:00

原本是用下面的,但出現錯誤訊息,timestamp無法使用datetime(原本以為那欄是時間...時間函數真的好複雜/images/emoticon/emoticon02.gif)

value=[]
for i in range(len(df1)):
    value.append(df1['started_at'][i].dt.Tostring("HH:mm:ss"))
    
AttributeError: 'Timestamp' object has no attribute 'dt'

試了一陣子都無法解決,目前想到的方式是將DataFrame的'started_at'分割後日期和時間(時間轉成字串,等於一開始就不做轉換日期的動作,因為那個TimeStamp搞得我頭很痛QWQ)

L=[]
for i in df1['started_at']:
    time=i.split(' ')
    L.append(time[1])
df1.insert(15,column='time',value=L) 

當嘗試想直接將新的一欄(str)轉換成Datetime時又不行了XDD
所以我決定明天再來解決這個難題!(哈) 不然實在是腦袋轉不過來了...
明天見la/images/emoticon/emoticon37.gif


上一篇
[Day8] 利用duplicated和drop_duplicates篩選資料
下一篇
[Day10] 那些關於Datetime的問題
系列文
商業數據分析應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言