I am trying to do a pivot table of frequency counts using Pandas.
I have the following code:
from pandas import pivot_table, DataFrame, crosstab
import numpy as np
df=DataFrame(
{'Y':[99999991, 99999992, 99999993, 99999994, 99999995,
99999996, 99999997, 99999998, 99999999],
'X':[1, 2, 3, 4, 5, 6, 7, 8, 9],
'X2':[1, 2, 3, 4, 5, 6, 7, 8, 9]})
print pivot_table(df,rows=['Y'], cols=['X'],aggfunc=np.sum)
This is my output:
X 1 2 3 4 5 6 7 8 9
Y
99999991 1 NaN NaN NaN NaN NaN NaN NaN NaN
99999992 NaN 2 NaN NaN NaN NaN NaN NaN NaN
99999993 NaN NaN 3 NaN NaN NaN NaN NaN NaN
99999994 NaN NaN NaN 4 NaN NaN NaN NaN NaN
99999995 NaN NaN NaN NaN 5 NaN NaN NaN NaN
99999996 NaN NaN NaN NaN NaN 6 NaN NaN NaN
99999997 NaN NaN NaN NaN NaN NaN 7 NaN NaN
99999998 NaN NaN NaN NaN NaN NaN NaN 8 NaN
99999999 NaN NaN NaN NaN NaN NaN NaN NaN 9
This is my desired output:
X 1 2 3 4 5 6 7 8 9
X2
1 99999991 NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN 99999992 NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN 99999993 NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN 99999994 NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN 99999995 NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN 99999996 NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN 99999997 NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN 99999998 NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN 99999999
This is what I keep getting:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 9 entries, 1 to 9
Data columns:
('Y', 1L) 1 non-null values
('Y', 2L) 1 non-null values
('Y', 3L) 1 non-null values
('Y', 4L) 1 non-null values
('Y', 5L) 1 non-null values
('Y', 6L) 1 non-null values
('Y', 7L) 1 non-null values
('Y', 8L) 1 non-null values
('Y', 9L) 1 non-null values
dtypes: float64(9)
Does anyone know why? Is the output too big. I can't seem to find anything on it.
Just replace rows=['Y']
with rows=['X2']
>>> print pivot_table(df,rows=['X2'], cols=['X'],aggfunc=np.sum)
Y
X 1 2 3 4 5 6 7 8 9
X2
1 101 NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN 102 NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN 103 NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN 104 NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN 105 NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN 106 NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN 107 NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN 108 NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN 109
Try this:
In [3]: df.pivot_table('Y', rows='X', cols='X2')
X2 1 2 3 4 5 6 7 8 9
X
1 99999991 NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN 99999992 NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN 99999993 NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN 99999994 NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN 99999995 NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN 99999996 NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN 99999997 NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN 99999998 NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN 99999999
This would also work:
pivot_table(df, 'Y', rows='X', cols='X2')
or
pivot_table(df, rows='X', cols='X2')['Y']
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With