[英]Plot number of occurrences from Pandas DataFrame
我有一個包含兩列的 DataFrame。 其中一個包含時間戳,另一個包含某些操作的 ID。 類似的東西:
2000-12-29 00:10:00 action1
2000-12-29 00:20:00 action2
2000-12-29 00:30:00 action2
2000-12-29 00:40:00 action1
2000-12-29 00:50:00 action1
...
2000-12-31 00:10:00 action1
2000-12-31 00:20:00 action2
2000-12-31 00:30:00 action2
我想知道某天執行了多少特定類型的操作。 即對於每一天,我需要計算 actionX 的出現次數,並用 X 軸上的日期和 Y 軸上的 actionX 為每個日期繪制此數據。
當然,我可以通過迭代我的數據集來天真地計算每天的動作。 但是使用 pandas/matplotlib 的“正確方法”是什么?
您可以使用以下方法獲取計數
df.groupby([df.index.date, 'action']).count()
或者您可以使用此方法直接繪圖
df.groupby([df.index.date, 'action']).count().plot(kind='bar')
您也可以將結果存儲起來進行count
,然后單獨繪制。 這是假設您的索引已經是 datetimeindex 格式,否則請按照上面@mkln 的說明進行操作。
從...開始
mydate col_name
0 2000-12-29 00:10:00 action1
1 2000-12-29 00:20:00 action2
2 2000-12-29 00:30:00 action2
3 2000-12-29 00:40:00 action1
4 2000-12-29 00:50:00 action1
5 2000-12-31 00:10:00 action1
6 2000-12-31 00:20:00 action2
7 2000-12-31 00:30:00 action2
你可以做
df['mydate'] = pd.to_datetime(df['mydate'])
df = df.set_index('mydate')
df['day'] = df.index.date
counts = df.groupby(['day', 'col_name']).agg(len)
但也許還有更直接的方法。 無論如何,以上應該有效。
如果您想將計數用作 DataFrame,我會將其轉換回
counts = pd.DataFrame(counts, columns=['count'])
我發現組合.count_values().plot.bar()
非常直觀地繪制直方圖。 它還為您按正確的順序排列類別,在許多類別過多的情況下,您可以簡單地執行.count_values().iloc[:k].plot.bar()
。
所以,在你的情況下,我會做的是計算一個新的 Pandas 系列日期+動作,格式化為可讀性,然后調用上面的代碼片段之一。 代碼可能如下所示:
date_and_action = df['date'].astype(str).str.slice(0, 10) + '_' + df['action']
date_and_action.count_values().iloc[:k].plot.bar()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.