使用Python和绘图按日期对Pandas Dataframe进行分组

时间:2015-05-09 01:39:38

标签: python pandas

我有一个逗号分隔文件,我正在通过Python阅读Pandas。这是一个子集:

Location   Time                 Value1 Value2 
CCNY       2013-01-01 00:00:00  59     12.71    
CCNY       2013-01-01 01:00:00  96     10.6 
CCNY       2013-01-01 02:00:00  105    11.94    
CCNY       2013-01-01 03:00:00  81     11.73    
CCNY       2013-01-01 04:00:00  60     13.05    
CCNY       2013-01-01 05:00:00  51     13.25
... 
CCNY       2013-31-01 06:00:00  28     13.03    

我需要绘制value1(x轴)和value2(y轴),但我需要每天都这样做。因此,对于包含整月1月值的文件的这一部分,将有31个图。

我应该怎么做?

(最终目标是在每个图中获得最佳拟合线和r平方值。)

感谢。

2 个答案:

答案 0 :(得分:3)

见下文 - 按天分组数据并为每个数据生成一个图。

df.groupby(df['Time'].dt.day).plot(x='Value1', y='Value2')

答案 1 :(得分:1)

你的csv看起来像一个固定宽度的文件所以我会使用read_fwf,你需要重命名时间列,因为它将时间部分视为未命名的列,然后你可以使用@ chrisB的答案来实现你想要的:

In [35]:

t="""Location   Time                 Value1 Value2 
CCNY       2013-01-01 00:00:00  59     12.71    
CCNY       2013-01-01 01:00:00  96     10.6 
CCNY       2013-01-01 02:00:00  105    11.94    
CCNY       2013-01-02 03:00:00  81     11.73    
CCNY       2013-01-02 04:00:00  60     13.05    
CCNY       2013-01-02 05:00:00  51     13.25"""
​
df = pd.read_fwf(io.StringIO(t), parse_dates=[[1,2]])
df.rename(columns={'Time_Unnamed: 2':'Time'},inplace=True)
df
Out[35]:
                 Time Location  Value1  Value2
0 2013-01-01 00:00:00     CCNY      59   12.71
1 2013-01-01 01:00:00     CCNY      96   10.60
2 2013-01-01 02:00:00     CCNY     105   11.94
3 2013-01-02 03:00:00     CCNY      81   11.73
4 2013-01-02 04:00:00     CCNY      60   13.05
5 2013-01-02 05:00:00     CCNY      51   13.25
In [36]:

df.groupby(df['Time'].dt.date).plot(x='Value1', y='Value2')
Out[36]:
2013-01-01    Axes(0.125,0.125;0.775x0.775)
2013-01-02    Axes(0.125,0.125;0.775x0.775)
dtype: object

结果图:

enter image description here

enter image description here