programing

데이터 프레임의 여러 데이터 그룹을 하나의 그림으로 표시하는 방법

megabox 2023. 7. 23. 14:10
반응형

데이터 프레임의 여러 데이터 그룹을 하나의 그림으로 표시하는 방법

아래와 같은 형식으로 수년간의 온도 기록이 있는 온도 파일을 가지고 있습니다.

2012-04-12,16:13:09,20.6
2012-04-12,17:13:09,20.9
2012-04-12,18:13:09,20.6
2007-05-12,19:13:09,5.4
2007-05-12,20:13:09,20.6
2007-05-12,20:13:09,20.6
2005-08-11,11:13:09,20.6
2005-08-11,11:13:09,17.5
2005-08-13,07:13:09,20.6
2006-04-13,01:13:09,20.6

매년 기록의 숫자와 시간이 다르기 때문에 판다의 날짜 표시는 모두 다릅니다.

비교를 위해 다른 연도의 데이터를 같은 그림에 표시하려고 합니다.X축은 1월부터 12월까지이고, Y축은 온도입니다.어떻게 하면 좋을까요?

시도:

ax = df1.plot()
df2.plot(ax=ax)

Jupyter/Ipython 노트북을 실행하고 있으며 사용에 문제가 있는 경우;

ax = df1.plot()

df2.plot(ax=ax)

같은 셀 안에서 명령을 실행합니다!!어떤 이유에서인지 그것들이 순차적인 세포로 분리될 때 작동하지 않습니다.적어도 저는.

  • Chang의 답변은 동일한 데이터 프레임에 다른 데이터 프레임을 플롯하는 방법을 보여줍니다.axes.
  • 이 경우 모든 데이터가 동일한 데이터 프레임에 있으므로 및 을 사용하는 것이 좋습니다.
    • 또는 를 사용할 수 있습니다.
    • dfp = df.pivot_table(index='Month', columns='Year', values='value', aggfunc='mean')
  • 사용 시,names=파일에 열 머리글이 없을 때 열 머리글을 만듭니다.'date'열을 구문 분석해야 합니다.datetime64[ns] Dtype그래서 추출기는 추출하는 데 사용될 수 있습니다.month그리고.year.
import pandas as pd

# given the data in a file as shown in the op
df = pd.read_csv('temp.csv', names=['date', 'time', 'value'], parse_dates=['date'])
    
# create additional month and year columns for convenience
df['Year'] = df.date.dt.year
df['Month'] = df.date.dt.month

# groupby the month a year and aggreate mean on the value column
dfg = df.groupby(['Month', 'Year'])['value'].mean().unstack()

# display(dfg)                     
Year        2005  2006       2007  2012
Month                                  
4            NaN  20.6        NaN  20.7
5            NaN   NaN  15.533333   NaN
8      19.566667   NaN        NaN   NaN

이제는 매년을 별도의 선으로 표시하는 것이 쉽습니다.OP에는 매년 하나의 관측치만 있으므로 마커만 표시됩니다.

ax = dfg.plot(figsize=(9, 7), marker='.', xticks=dfg.index)

enter image description here

여러 데이터 프레임에 대해 이 작업을 수행하려면 다음과 같이 루프에 대해 를 수행할 수 있습니다.

fig = plt.figure(num=None, figsize=(10, 8))
ax = dict_of_dfs['FOO'].column.plot()
for BAR in dict_of_dfs.keys():
    if BAR == 'FOO':
        pass
    else:
        dict_of_dfs[BAR].column.plot(ax=ax)

이것은 또한 다음과 같은 기능 없이 구현될 수 있습니다.if조건:

fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
    dict_of_dfs[BAR].plot(ax=ax)

다음을 활용할 수 있습니다.hue의 매개 변수.seaborn예:

import seaborn as sns
df = sns.load_dataset('flights')

     year month  passengers
0    1949   Jan         112
1    1949   Feb         118
2    1949   Mar         132
3    1949   Apr         129
4    1949   May         121
..    ...   ...         ...
139  1960   Aug         606
140  1960   Sep         508
141  1960   Oct         461
142  1960   Nov         390
143  1960   Dec         432

sns.lineplot(x='month', y='passengers', hue='year', data=df)

enter image description here

언급URL : https://stackoverflow.com/questions/13872533/how-to-plot-different-groups-of-data-from-a-dataframe-into-a-single-figure

반응형