0

I want to know if the Pandas applymap function always go through from top to bottom and left to right (iterating through each row on a per column basis).

Mainly, I'm using applymap to pass a dictionary to count the number of items as a list in each cell, BUT I have to account for it differently once the value is seen for the first time. So if applymap always goes works consistently, I can use it, but if there are some weird potential for race conditions, then I can't.

import numpy as np
import pandas as pd

vals = np.arange(25).reshape([5,5])
df = pd.DataFrame(vals)
print(df)


    0   1   2   3   4
0   0   1   2   3   4
1   5   6   7   8   9
2   10  11  12  13  14
3   15  16  17  18  19
4   20  21  22  23  24

l = []
_ = df.applymap(lambda x: l.append(x))

print(l)

[ 0,  5, 10, 15, 20, 
1, 6, 11, 16, 21, 
2, 7, 12, 17, 22,  
3, 8, 13, 18, 23,  
4, 9, 14, 19, 24]
Razorocean
  • 378
  • 2
  • 13

2 Answers2

0

I believe this always will be consistent, as apply by default also works column-by-columns.

I found a comment here on Stack Overflow to that effect (emphasis mine):

strictly speaking, applymap internally is implemented via apply with a little wrap-up over passed function parameter (rougly speaking replacing func to lambda x: [func(y) for y in x], and applying column-wise)

0

In the source code, applymap uses apply, which work by default by column.

The order seems consistent, even on a shuffled array:

import numpy as np
import pandas as pd
from itertools import count

df = pd.DataFrame(np.zeros((5,5)))

c = count()

df.sample(frac=1).sample(frac=1, axis=1).applymap(lambda x: next(c))

output:

   1  3   2   0   4
0  0  5  10  15  20
4  1  6  11  16  21
3  2  7  12  17  22
1  3  8  13  18  23
2  4  9  14  19  24

Now, I think the real question is, "is this behavior stable or is it just an implementation detail that could change in the future?"

mozway
  • 194,879
  • 13
  • 39
  • 75