簡體   English   中英

繪制 Pandas DataFrame 的出現次數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM