1

I am trying to count frequencies of an array. I've read this post, I am using DataFrame and get a series.

>>> a = np.array([1, 1, 5, 0, 1, 2, 2, 0, 1, 4])
>>> df = pd.DataFrame(a, columns=['a'])
>>> b = df.groupby('a').size()
>>> b
a
0    2
1    4
2    2
4    1
5    1
dtype: int64
>>> b.iloc[:,-1]

when i try to get the last column, i got this error.

Traceback (most recent call last):   File "<stdin>", line 1, in <module>   File "/Users/pan/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py", line 1472, in __getitem__
    return self._getitem_tuple(key)   File "/Users/pan/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py", line 2013, in _getitem_tuple
    self._has_valid_tuple(tup)   File "/Users/pan/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py", line 220, in _has_valid_tuple
    raise IndexingError('Too many indexers') pandas.core.indexing.IndexingError: Too many indexers

how to get the last column of b?

Amir Shabani
  • 3,857
  • 6
  • 30
  • 67

2 Answers2

2

Since pandas.Series is a

One-dimensional ndarray with axis labels

If you want to get just the frequencies column, i.e. the values of your series, use:

b.tolist()

or, alternatively:

b.to_dict()

to keep both labels and frequencies.

P.S:

For your specific task consider also collections package:

>>> from collections import Counter
>>> a = [1, 1, 5, 0, 1, 2, 2, 0, 1, 4]
>>> c = Counter(a)
>>> list(c.values())
[2, 4, 2, 1, 1]
Lante Dellarovere
  • 1,838
  • 2
  • 7
  • 10
1

Problem is output of GroupBy.size is Series, and Series have no columns, so is possible get last value only:

b.iloc[-1]

If use:

b.iloc[:,-1]

it return last column in Dataframe.

Here : means all rows and -1 in second position last column.

So if create DataFrame from Series:

b1 = df.groupby('a').size().reset_index(name='count')

it working like expected.

jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252