我正在学习利用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方法,但我不知道该如何去做。
谢谢!
答案 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
这样效率会大大降低(占用的空间比它需要的多得多),因为它包含大量缺失的数据。