![](/img/trans.png)
[英]Pandas iteratively append row values from multiple DataFrame columns
[英]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月。 我正在嘗試為Thing1
和Thing2
每個項目的每月總計繪制折線圖。
我正在嘗試使用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
的級別。 其中dfgb
是groupby
的DataFrame
。 然后可以通過以下方式繪制時間序列:
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.