簡體   English   中英

在熊貓中分組系列

[英]Grouping a series in pandas

我是熊貓新手。 我對此了解不多,所以請放輕松。 我試圖繪制2009年至2013年線形圖中A和B區域的火災面積與火災頻率的關系。 我想出了如何導入.csv文件,但是在對系列進行分組並創建圖形時遇到了問題。 我的csv文件如下所示:

Date, Area, NaturalDisaster
12/10/2009, A, Fire
12/13/2009, B, Flood
01/12/2010, B, Fire
05/01/2011, A, Fire
30/11/2012, B, Flood
14/03/2013, B, Fire

所以,請您幫我開始吧。 我將不勝感激。 謝謝。

您可以使用pandas.DataFrame.groupby對熊貓中的數據進行分組。

groupby和類似功能背后的主要思想是“拆分-應用-合並” ,通常,您可以:

  • 將您的數據集分組
  • 對每個單獨的組應用一些匯總函數,
  • 在一個新的數據框中將它們重新組合在一起。

要獲取在區域A和區域B中發生火災的頻率,您必須首先僅選擇發生火災的行,而不是泛洪行,可以使用布爾索引來實現此目的:

df[df['NaturalDisaster']=='Fire']

然后,您需要根據區域(A或B)進行分組(或分割)。 您可以簡單地使用groupby('Area')做到這一點。 將其添加到上一行代碼中,將變為:

df[df['NaturalDisaster']=='Fire'].groupby('Area')

最后,在熊貓中,您需要向組中應用一些聚合函數 (應用階段),我們將使用count()來計數結果的數量。 該行將變為:

df[df['NaturalDisaster']=='Fire'].groupby('Area').count()

不過有一個問題。 此結果有兩列,其中的數字完全相同。 這是因為我們同時計算了“ Date列和“ NaturalDisaster列。 這種重復的信息可能會令人討厭,因此在進行計數時,我們只占用一列。 最后一行變為

areas = df[df['NaturalDisaster']=='Fire'].groupby('Area')['NaturalDisaster'].count()

現在,我們可以計算出發生在A區和B區的火災事件的數量,但理想情況下,我們需要頻率。 我們可以用sum(areas)除以火災總數來得到:

areas /= sum(areas)

現在,我們有了一個數據框,其中包含區域A和B中發生火災的頻率。我們可以使用以下方法將其繪制為條形圖:

areas.plot(kind='bar')

將所有代碼整合到一起,它變成:

from io import StringIO

import pandas as pd
import matplotlib.pyplot as plt


s = '''Date, Area, NaturalDisaster
12/10/2009, A, Fire
12/13/2009, B, Flood
01/12/2010, B, Fire
05/01/2011, A, Fire
30/11/2012, B, Flood
14/03/2013, B, Fire'''

df = pd.read_csv(StringIO(s), sep=',\s+', engine='python')

# Ignore everything above this part, it's simply creating your dataframe.

areas = df[df['NaturalDisaster']=='Fire'].groupby('Area')['NaturalDisaster'].count() 
areas /= sum(areas)

areas.plot(kind='bar')

plt.show()

樣例圖

最后,我使用groupby回答了這個問題,因為您特別詢問過它,但是您也可以使用pandas.pivot_table進行相同的操作(以及類似的功能)。 使用pivot_table創建areas數據pivot_table將類似於

areas = pd.pivot_table(df[df['NaturalDisaster']=='Fire'],
                       values='NaturalDisaster', 
                       index='Area', 
                       aggfunc='count')

然后,您將繼續執行上述相同的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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