.. _whatsnew_060:

v.0.6.0 (November 25, 2011)
---------------------------

New Features
~~~~~~~~~~~~
- :ref:`Added <reshaping.melt>` ``melt`` function to ``pandas.core.reshape``
- :ref:`Added <groupby.multiindex>` ``level`` parameter to group by level in Series and DataFrame descriptive statistics (PR313_)
- :ref:`Added <basics.head_tail>` ``head`` and ``tail`` methods to Series, analogous to to DataFrame (PR296_)
- :ref:`Added <indexing.boolean>` ``Series.isin`` function which checks if each value is contained in a passed sequence (GH289_)
- :ref:`Added <io.formatting>` ``float_format`` option to ``Series.to_string``
- :ref:`Added <io.parse_dates>` ``skip_footer`` (GH291_) and ``converters`` (GH343_) options to ``read_csv`` and ``read_table``
- :ref:`Added <indexing.duplicate>` ``drop_duplicates`` and ``duplicated`` functions for removing duplicate DataFrame rows and checking for duplicate rows, respectively (GH319_)
- :ref:`Implemented <dsintro.boolean>` operators '&', '|', '^', '-' on DataFrame (GH347_)
- :ref:`Added <basics.stats>` ``Series.mad``, mean absolute deviation
- :ref:`Added <timeseries.offsets>` ``QuarterEnd`` DateOffset (PR321_)
- :ref:`Added <dsintro.numpy_interop>` ``dot`` to DataFrame (GH65_)
- :ref:`Added <basics.panel>` ``orient`` option to ``Panel.from_dict`` (GH359_, GH301_)
- :ref:`Added <basics.dataframe.from_dict>` ``orient`` option to ``DataFrame.from_dict``
- :ref:`Added <basics.dataframe.from_records>` passing list of tuples or list of lists to ``DataFrame.from_records`` (GH357_)
- :ref:`Added <groupby.multiindex>` multiple levels to groupby (GH103_)
- :ref:`Allow <basics.sorting>` multiple columns in ``by`` argument of ``DataFrame.sort_index`` (GH92_, PR362_)
- :ref:`Added <indexing.basics.get_value>` fast ``get_value`` and ``put_value`` methods to DataFrame (GH360_)
- :ref:`Added <computation.covariance>` ``cov`` instance methods to Series and DataFrame (GH194_, PR362_)
- :ref:`Added <visualization.barplot>` ``kind='bar'`` option to ``DataFrame.plot`` (PR348_)
- :ref:`Added <basics.idxmin>` ``idxmin`` and ``idxmax`` to Series and DataFrame (PR286_)
- :ref:`Added <io.clipboard>` ``read_clipboard`` function to parse DataFrame from clipboard (GH300_)
- :ref:`Added <basics.stats>` ``nunique`` function to Series for counting unique elements (GH297_)
- :ref:`Made <basics.dataframe>` DataFrame constructor use Series name if no columns passed (GH373_)
- :ref:`Support <io.parse_dates>` regular expressions in read_table/read_csv (GH364_)
- :ref:`Added <io.html>` ``DataFrame.to_html`` for writing DataFrame to HTML (PR387_)
- :ref:`Added <basics.dataframe>` support for MaskedArray data in DataFrame, masked values converted to NaN (PR396_)
- :ref:`Added <visualization.box>` ``DataFrame.boxplot`` function (GH368_)
- :ref:`Can <basics.apply>` pass extra args, kwds to DataFrame.apply (GH376_)
- :ref:`Implement <merging.multikey_join>` ``DataFrame.join`` with vector ``on`` argument (GH312_)
- :ref:`Added <visualization.basic>` ``legend`` boolean flag to ``DataFrame.plot`` (GH324_)
- :ref:`Can <reshaping.stacking>` pass multiple levels to ``stack`` and ``unstack`` (GH370_)
- :ref:`Can <reshaping.pivot>` pass multiple values columns to ``pivot_table`` (GH381_)
- :ref:`Use <groupby.multiindex>` Series name in GroupBy for result index (GH363_)
- :ref:`Added <basics.apply>` ``raw`` option to ``DataFrame.apply`` for performance if only need ndarray (GH309_)
- Added proper, tested weighted least squares to standard and panel OLS (GH303_)

Performance Enhancements
~~~~~~~~~~~~~~~~~~~~~~~~
- VBENCH Cythonized ``cache_readonly``, resulting in substantial micro-performance enhancements throughout the codebase (GH361_)
- VBENCH Special Cython matrix iterator for applying arbitrary reduction operations with 3-5x better performance than `np.apply_along_axis` (GH309_)
- VBENCH Improved performance of ``MultiIndex.from_tuples``
- VBENCH Special Cython matrix iterator for applying arbitrary reduction operations
- VBENCH + DOCUMENT Add ``raw`` option to ``DataFrame.apply`` for getting better performance when
- VBENCH Faster cythonized count by level in Series and DataFrame (GH341_)
- VBENCH? Significant GroupBy performance enhancement with multiple keys with many "empty" combinations
- VBENCH New Cython vectorized function ``map_infer`` speeds up ``Series.apply`` and ``Series.map`` significantly when passed elementwise Python function, motivated by (PR355_)
- VBENCH Significantly improved performance of ``Series.order``, which also makes np.unique called on a Series faster (GH327_)
- VBENCH Vastly improved performance of GroupBy on axes with a MultiIndex (GH299_)

.. _GH65: https://github.com/pydata/pandas/issues/65
.. _GH92: https://github.com/pydata/pandas/issues/92
.. _GH103: https://github.com/pydata/pandas/issues/103
.. _GH194: https://github.com/pydata/pandas/issues/194
.. _GH289: https://github.com/pydata/pandas/issues/289
.. _GH291: https://github.com/pydata/pandas/issues/291
.. _GH297: https://github.com/pydata/pandas/issues/297
.. _GH299: https://github.com/pydata/pandas/issues/299
.. _GH300: https://github.com/pydata/pandas/issues/300
.. _GH301: https://github.com/pydata/pandas/issues/301
.. _GH303: https://github.com/pydata/pandas/issues/303
.. _GH305: https://github.com/pydata/pandas/issues/305
.. _GH308: https://github.com/pydata/pandas/issues/308
.. _GH309: https://github.com/pydata/pandas/issues/309
.. _GH312: https://github.com/pydata/pandas/issues/312
.. _GH319: https://github.com/pydata/pandas/issues/319
.. _GH324: https://github.com/pydata/pandas/issues/324
.. _GH327: https://github.com/pydata/pandas/issues/327
.. _GH341: https://github.com/pydata/pandas/issues/341
.. _GH343: https://github.com/pydata/pandas/issues/343
.. _GH347: https://github.com/pydata/pandas/issues/347
.. _GH357: https://github.com/pydata/pandas/issues/357
.. _GH359: https://github.com/pydata/pandas/issues/359
.. _GH360: https://github.com/pydata/pandas/issues/360
.. _GH361: https://github.com/pydata/pandas/issues/361
.. _GH363: https://github.com/pydata/pandas/issues/363
.. _GH364: https://github.com/pydata/pandas/issues/364
.. _GH368: https://github.com/pydata/pandas/issues/368
.. _GH370: https://github.com/pydata/pandas/issues/370
.. _GH373: https://github.com/pydata/pandas/issues/373
.. _GH376: https://github.com/pydata/pandas/issues/376
.. _GH381: https://github.com/pydata/pandas/issues/381
.. _GH382: https://github.com/pydata/pandas/issues/382
.. _GH393: https://github.com/pydata/pandas/issues/393
.. _PR286: https://github.com/pydata/pandas/pull/286
.. _PR296: https://github.com/pydata/pandas/pull/296
.. _PR313: https://github.com/pydata/pandas/pull/313
.. _PR321: https://github.com/pydata/pandas/pull/321
.. _PR348: https://github.com/pydata/pandas/pull/348
.. _PR355: https://github.com/pydata/pandas/pull/355
.. _PR362: https://github.com/pydata/pandas/pull/362
.. _PR386: https://github.com/pydata/pandas/pull/386
.. _PR387: https://github.com/pydata/pandas/pull/387
.. _PR396: https://github.com/pydata/pandas/pull/396
