MetaIssue: Pandas tries too hard to be smart
....and ends up doing things wrong.

I had the following task: Given a csv file A and a set of identically structured files X, Y, Z [which have keys in the first two columns, and values in subsequent columns]: I wanted to create a new file which has contents MAX(A.column_val, X.column_val + Y.column_val + Z.column_val).

I had previously written a pure python function to sort the individual columns, and then perform an merge-join on the columns. However conceptually this task is only a few lines of pandas code:

``` python
summed = pandas.concat([X, Y, Z]).groupby(["key_col1", "key_col2"]).sum()
output = pandas.concat([A, summed]).groupby(["key_col1", "key_col2"]).max()
output.to_csv("something.csv")
```

So surely switching to pandas would make the code easier to understand and maintain. Right? Nope!!!

All of the following were issues I had to work around:
1. The results of sum()/max() have heirarchical indexes and so I must liberally sprinkle `reset_index()` at particular points in my code.
2. Pandas tries to be smart and assumes that the empty string in my key_cols is a NULL string and converts it to NaN. This is annoying because now I have to add `na_rep=""` to my `to_csv` command.
3. More significantly though, pandas thinks that a NaN in a groupby column is reason to exclude the entire row... so now I have to add a bunch of lines to `fillna('')` (and that doesn't modify the frame you call it on, but rather returns a copy so you have to `fillna('', inplace=True)`
4. Because pandas doesn't support columns with integer values and NA values it has cast all my ints to floats and my output now looks like `1.0, 2.0`. instead of `1, 2`. So I have to add a `float_format` directive to the `to_csv`.
5. Pandas also likes to output a row number, so `index=False` has to get added to `to_csv.`

The end result is that I am not of the opinion that the resulting pandas implementation is any more legible or maintainable. In three weeks am I going to remember why I have set `index=False` or what the hell that means? Am I going to understand why the calls to `reset_index` are necessary, or what they do? Probably not, which makes me concerned about using this code in production.
