簡體   English   中英

Pandas DataFrame-將月份轉換為日期時間,並從多個列中反復選擇數據進行繪圖

[英]Pandas DataFrame - convert months to datetime and iteratively select data from multiple columns for plotting

假設我有一個格式為pandas的DataFrame:

     Month Thing1 Thing2       Tot
0   Jan-12      A      Z  0.005880
1   Jan-12      A      Z  0.024500
...
20  Jan-12      B      Y  0.001533
21  Jan-12      C      X  0.003892
22  Jan-12      C      X  0.001680
23  Jan-12      C      X  0.001680
24  Jan-12      C      X  0.001680
25  Jan-12      C      X  0.001680
26  Jan-12      A      W  0.001680
27  Jan-12      D      V  0.013440
28  Jan-12      E      U  0.001680
...

月列將統一為14年4月。 我正在嘗試為Thing1Thing2每個項目的每月總計繪制折線圖。

我正在嘗試使用groupby

a=pd.read_csv('all2.csv')
sums=a.groupby([u'Month',u'Thing1',u'Thing2']).sum()

這給了我:

Apr-12 A      W         6.427773
              Z         4.347471
       B      T         7.062425
              Y        17.183562
       C      X        14.583337
       D      V         0.114450
       E      U         0.008050
       F      Q         0.000490
              R         0.004468
       G      P         0.010932
       ...

但是,按字母順序顯示月份。 我的問題是:

如何讓Pandas將月份列視為日期時間對象?

如何遍歷Thing1列並繪制Thing2每個項目的每月時間序列總計?

我想象有一種重組Dataframe的方法,這樣對plot()的簡單調用就可以完成工作?

這是因為您的“月”列不在正確的dtype 您可以通過首先將“ Month列轉換為日期時間格式來獲得預期的結果:

df['Month']=pd.to_datetime(df.Month) ,然后調用df.groupby([u'Month',u'Thing1',u'Thing2']).sum()

但請注意, Pandas不知道Jan-12意味着2014-01-12還是2012-01 ,默認情況下會將您的數據轉換為前者。 要獲取后者,請為.to_datetime提供format='%b-%y'參數。

對於第二個問題,可以通過dfgb.index.get_level_values(1)獲得Thing1的級別。 其中dfgbgroupbyDataFrame 然后可以通過以下方式繪制時間序列:

for item in dfgb.index.get_level_values(1):
    dfgb.xs(item, level=1).plot(kind='bar') #for bar graph

暫無
暫無

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

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