![](/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.