Issue 1:
related #739

Have a look at this example:

import pandas as pd
import numpy as np
from StringIO import StringIO
print "Pandas version %s\n\n" % pd.__version__

data1 = """idx,metric
0,2.1
1,2.5
2,3"""

data2 = """idx,metric
0,2.7
1,2.2
2,2.8"""

df1 = pd.read_csv(StringIO(data1))
df2 = pd.read_csv(StringIO(data2))
concatenated = pd.concat([df1, df2], ignore_index=True)
merged = concatenated.groupby("idx").agg([np.mean, np.std])

print merged
print merged.sort('metric')

and its output:

$ python test.py
Pandas version 0.11.0

metric
mean std
idx
0 2.40 0.424264
1 2.35 0.212132
2 2.90 0.141421
Traceback (most recent call last):
File "test.py", line 22, in <module>
print merged.sort('metric')
File "/***/Python-2.7.3/lib/python2.7/site-packages/pandas/core/frame.py", line 3098, in sort
inplace=inplace)
File "/***/Python-2.7.3/lib/python2.7/site-packages/pandas/core/frame.py", line 3153, in sort_index
% str(by))
ValueError: Cannot sort by duplicate column metric

The problem here is not that there is a duplicate column metric as stated by the error message. The problem is that there are still two sub-levels. The solution in this case is to use

merged.sort([('metric', 'mean')])

for sorting by the mean of the metric. It took myself quite a while to figure this out. First of all, the error message should be more clear in this case. Then, maybe I was too stupid, but I could not find the solution in the docs, but within a thread on StackOverflow. Looks like the error message above is the result of an over-generalized condition around https://github.com/pydata/pandas/blob/v0.12.0rc1/pandas/core/frame.py#L3269

Issue 2:
When iterating through several dimension columns and doing a groupby function, it often works. However, for certain columns it will not and instead I get an error. The error is:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

The only thing different about these specific columns is that they are unique. However, we won't often be aware if they are unique. I'm hoping this isn't the issue and if it is, is there a work around?

Thanks!

Below is the full traceback.

ValueError Traceback (most recent call last)

in ()

----> 1 df_grp = df.groupby('post_id').sum()

/Users/Dev/anaconda/lib/python2.7/site-packages/pandas/core/generic.pyc in groupby(self, by, axis, level, as_index, sort, group_keys, squeeze)

3157 axis = self._get_axis_number(axis)

3158 return groupby(self, by=by, axis=axis, level=level, as_index=as_index,

-> 3159 sort=sort, group_keys=group_keys, squeeze=squeeze)

3160

3161 def asfreq(self, freq, method=None, how=None, normalize=False):

/Users/Dev/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in groupby(obj, by, *_kwds)

1197 raise TypeError('invalid type: %s' % type(obj))

1198

-> 1199 return klass(obj, by, *_kwds)

1200

1201

/Users/Dev/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in init(self, obj, keys, axis, level, grouper, exclusions, selection, as_index, sort, group_keys, squeeze)

386 if grouper is None:

387 grouper, exclusions, obj = _get_grouper(obj, keys, axis=axis,

--> 388 level=level, sort=sort)

389

390 self.obj = obj

/Users/Dev/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in _get_grouper(obj, key, axis, level, sort)

2152 in_axis, name = False, None

2153

-> 2154 if is_categorical_dtype(gpr) and len(gpr) != len(obj):

2155 raise ValueError("Categorical dtype grouper must have len(grouper) == len(data)")

2156

/Users/Dev/anaconda/lib/python2.7/site-packages/pandas/core/generic.pyc in nonzero(self)

712 raise ValueError("The truth value of a {0} is ambiguous. "

713 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."

--> 714 .format(self.class.name))

715

716 bool = nonzero

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().