Issue 1:
one more trouble case with duplicate column names

the exception could be nicer (sort ambiguous because of duplicate column or similar) or it could sort by the first? column with this name (although this would not be nice in case the column is not duplicate but has in fact different content with the same name and the user not being aware of this).

import pandas as pd
df = pd.DataFrame([(1,2), (3,4)], columns = ['a', 'a'])
df.sort('a')

---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-251abbb5c77e> in <module>()
1 import pandas as pd
2 df = pd.DataFrame([(1,2), (3,4)], columns = ['a', 'a'])
----> 3 df.sort('a')

/usr/local/lib/python2.7/dist-packages/pandas-0.10.0.dev_74ab638-py2.7-linux-x86_64.egg/pandas/core/frame.pyc in sort(self, columns, column, axis, ascending, inplace)
3062 columns = column
3063 return self.sort_index(by=columns, axis=axis, ascending=ascending,
-> 3064 inplace=inplace)
3065
3066 def sort_index(self, axis=0, by=None, ascending=True, inplace=False):

/usr/local/lib/python2.7/dist-packages/pandas-0.10.0.dev_74ab638-py2.7-linux-x86_64.egg/pandas/core/frame.pyc in sort_index(self, axis, by, ascending, inplace)
3125 self._clear_item_cache()
3126 else:
-> 3127 return self.take(indexer, axis=axis)
3128
3129 def sortlevel(self, level=0, axis=0, ascending=True, inplace=False):

/usr/local/lib/python2.7/dist-packages/pandas-0.10.0.dev_74ab638-py2.7-linux-x86_64.egg/pandas/core/frame.pyc in take(self, indices, axis)
2853 new_values = com.take_2d(self.values,
2854 com._ensure_int64(indices),
-> 2855 axis=axis)
2856 if axis == 0:
2857 new_columns = self.columns

/usr/local/lib/python2.7/dist-packages/pandas-0.10.0.dev_74ab638-py2.7-linux-x86_64.egg/pandas/core/common.pyc in take_2d(arr, indexer, out, mask, needs_masking, axis, fill_value)
414 out = np.empty(out_shape, dtype=arr.dtype)
415 take_f = _get_take2d_function(dtype_str, axis=axis)
--> 416 take_f(arr, _ensure_int64(indexer), out=out, fill_value=fill_value)
417 return out
418 elif dtype_str in ('float64', 'object', 'datetime64[ns]'):

/usr/local/lib/python2.7/dist-packages/pandas-0.10.0.dev_74ab638-py2.7-linux-x86_64.egg/pandas/algos.so in pandas.algos.take_2d_axis0_int64 (pandas/algos.c:73957)()

ValueError: Buffer has wrong number of dimensions (expected 1, got 2)

Issue 2:
Code Sample, a copy-pastable example if possible

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'Number' : [1, 2], 'Date' : ["2017-03-02"] * 2, 'Str' : ["foo", "inf"]})

In [3]: df
Out[3]:
Date Number Str
0 2017-03-02 1 foo
1 2017-03-02 2 inf

In [4]: df.groupby(['Number']).apply(lambda x: x.iloc[0])
Out[4]:
Date Number Str
Number
1 2017-03-02 1 foo
2 2017-03-02 2 inf

In [5]: df.Date = pd.to_datetime(df.Date)

In [6]: df
Out[6]:
Date Number Str
0 2017-03-02 1 foo
1 2017-03-02 2 inf

In [7]: df.groupby(['Number']).apply(lambda x: x.iloc[0])
Out[7]:
Date Number Str
Number
1 2017-03-02 1 NaN
2 2017-03-02 2 inf

Problem description

When I change the type of the Date column to a Pandas datetime, it causes other columns' types to change in unexpected ways when doing a group-by/apply. Notice the contents of the "Str" column changes to a numeric type in the final group-by/apply (a contributing factor is probably that one of the elements is the string "inf"). The "inf" value has become inf, and the "foo" value has become NaN.

Expected Output

I expect the Str column to remain a string type, and contain the original strings. I.e.:

Date Number Str
0 2017-03-02 1 foo
1 2017-03-02 2 inf

Output of pd.show_versions()

INSTALLED VERSIONS
------------------
commit: None
python: 2.7.11.final.0
python-bits: 64
OS: Linux
OS-release: 3.10.0-327.10.1.el7.x86_64
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8

pandas: 0.18.1

nose: 1.3.7

pip: None

setuptools: 0.6

Cython: 0.24.1

numpy: 1.11.1

scipy: 0.18.0

statsmodels: 0.6.1

xarray: 0.7.0

IPython: 5.0.0

sphinx: 1.3.5

patsy: 0.4.1

dateutil: 2.5.3

pytz: 2016.6.1

blosc: None

bottleneck: 1.1.0

tables: 3.2.3.1

numexpr: 2.6.1

matplotlib: 1.5.1

openpyxl: 2.3.2

xlrd: 1.0.0

xlwt: 1.1.2

xlsxwriter: 0.9.2

lxml: 3.6.1

bs4: 4.4.1

html5lib: 0.999

httplib2: None

apiclient: None

sqlalchemy: 1.0.13

pymysql: 0.6.7.None

psycopg2: 2.5.4 (dt dec pq3 ext)

jinja2: 2.8

boto: 2.40.0

pandas_datareader: None