绘图和GroupBy方法

时间:2013-07-11 07:20:45

标签: python matplotlib pandas

我正在学习利用Pandas中的DataFrames,我想使用GroupBy方法生成以下内容:

我有两个数据帧,一个用于x轴信息,一个用于y。在每个数据帧中有三个版本的数据,比如'A','B','C'。我需要每个(即三行)的y对x的图。

示例代码:

df_x

<class 'pandas.core.frame.DataFrame'>
Int64Index: 100 entries, 0 to 99
Data columns (total 3 columns):
A     100  non-null values
B      100  non-null values
C    100  non-null values
dtypes: float64(2), object(1)

df_y

<class 'pandas.core.frame.DataFrame'>
Int64Index: 100 entries, 0 to 99
Data columns (total 3 columns):
A     100  non-null values
B      100  non-null values
C    100  non-null values
dtypes: float64(2), object(1)

是否有快速方法可以生成所需的图形,避免循环和使用Pandas方法?我正在考虑合并两个帧并使用GroupBy方法,但我不知道该如何去做。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你可以直接使用pyplot来做这个情节:

In [11]: plot(df_x, df_y)  # matplotlib.pyplot.plot
Out[11]:
[<matplotlib.lines.Line2D at 0x109c02910>,
 <matplotlib.lines.Line2D at 0x109c02b90>,
 <matplotlib.lines.Line2D at 0x109c02ed0>]

看来你需要设置传说:

pylab.legend(df_x.columns)

如果您真的想将数据重新整形为表格以使用.plot,也许您可​​以使用:

In [21]: df_x = pd.DataFrame([[1,2,1],[2,3,4]], columns=list('ABC'))

In [22]: df_y = pd.DataFrame([[2,6,1],[4,9,4]], columns=list('ABC'))

In [23]: pd.DataFrame({'x': df_x.stack(), 'y': df_y.stack()}).reset_index(level=1).pivot('x', 'level_1', 'y')
Out[23]:
level_1   A   B   C
x
1         2 NaN   1
2         4   6 NaN
3       NaN   9 NaN
4       NaN NaN   4

这样效率会大大降低(占用的空间比它需要的多得多),因为它包含大量缺失的数据。