1
+ import datetime
1
2
from typing import (
2
3
Callable ,
3
4
Hashable ,
4
5
Literal ,
6
+ Mapping ,
5
7
Sequence ,
6
- TypeVar ,
7
8
Union ,
8
9
overload ,
9
10
)
@@ -12,47 +13,116 @@ import numpy as np
12
13
import pandas as pd
13
14
from pandas .core .frame import DataFrame
14
15
from pandas .core .groupby .grouper import Grouper
16
+ from pandas .core .indexes .base import Index
15
17
from pandas .core .series import Series
16
18
from typing_extensions import TypeAlias
17
19
18
20
from pandas ._typing import (
19
21
AnyArrayLike ,
20
22
ArrayLike ,
21
- HashableT ,
22
- IndexLabel ,
23
+ HashableT1 ,
24
+ HashableT2 ,
25
+ HashableT3 ,
26
+ Label ,
23
27
Scalar ,
28
+ ScalarT ,
29
+ npt ,
24
30
)
25
31
32
+ _PivotAggCallable : TypeAlias = Callable [[Series ], ScalarT ]
33
+
34
+ _PivotAggFunc : TypeAlias = Union [
35
+ _PivotAggCallable ,
36
+ np .ufunc ,
37
+ Literal ["mean" , "sum" , "count" , "min" , "max" , "median" , "std" , "var" ],
38
+ ]
39
+
40
+ _NonIterableHashable : TypeAlias = Union [
41
+ str ,
42
+ datetime .date ,
43
+ datetime .datetime ,
44
+ datetime .timedelta ,
45
+ bool ,
46
+ int ,
47
+ float ,
48
+ complex ,
49
+ pd .Timestamp ,
50
+ pd .Timedelta ,
51
+ ]
52
+
53
+ _PivotTableIndexTypes : TypeAlias = Union [Label , list [HashableT1 ], Series , Grouper , None ]
54
+ _PivotTableColumnsTypes : TypeAlias = Union [
55
+ Label , list [HashableT2 ], Series , Grouper , None
56
+ ]
57
+
26
58
_ExtendedAnyArrayLike : TypeAlias = Union [AnyArrayLike , ArrayLike ]
27
59
28
- _HashableT2 = TypeVar ("_HashableT2" , bound = Hashable )
60
+ @overload
61
+ def pivot_table (
62
+ data : DataFrame ,
63
+ values : Label | list [HashableT3 ] | None = ...,
64
+ index : _PivotTableIndexTypes = ...,
65
+ columns : _PivotTableColumnsTypes = ...,
66
+ aggfunc : _PivotAggFunc
67
+ | list [_PivotAggFunc ]
68
+ | Mapping [Hashable , _PivotAggFunc ] = ...,
69
+ fill_value : Scalar | None = ...,
70
+ margins : bool = ...,
71
+ dropna : bool = ...,
72
+ margins_name : str = ...,
73
+ observed : bool = ...,
74
+ sort : bool = ...,
75
+ ) -> DataFrame : ...
29
76
77
+ # Can only use Index or ndarray when index or columns is a Grouper
78
+ @overload
79
+ def pivot_table (
80
+ data : DataFrame ,
81
+ values : Label | list [HashableT3 ] | None = ...,
82
+ * ,
83
+ index : Grouper ,
84
+ columns : _PivotTableColumnsTypes | Index | npt .NDArray = ...,
85
+ aggfunc : _PivotAggFunc
86
+ | list [_PivotAggFunc ]
87
+ | Mapping [Hashable , _PivotAggFunc ] = ...,
88
+ fill_value : Scalar | None = ...,
89
+ margins : bool = ...,
90
+ dropna : bool = ...,
91
+ margins_name : str = ...,
92
+ observed : bool = ...,
93
+ sort : bool = ...,
94
+ ) -> DataFrame : ...
95
+ @overload
30
96
def pivot_table (
31
97
data : DataFrame ,
32
- values : str | None = ...,
33
- index : str | Sequence | Grouper | None = ...,
34
- columns : str | Sequence | Grouper | None = ...,
35
- aggfunc = ...,
98
+ values : Label | list [HashableT3 ] | None = ...,
99
+ index : _PivotTableIndexTypes | Index | npt .NDArray = ...,
100
+ * ,
101
+ columns : Grouper ,
102
+ aggfunc : _PivotAggFunc
103
+ | list [_PivotAggFunc ]
104
+ | Mapping [Hashable , _PivotAggFunc ] = ...,
36
105
fill_value : Scalar | None = ...,
37
106
margins : bool = ...,
38
107
dropna : bool = ...,
39
108
margins_name : str = ...,
40
109
observed : bool = ...,
110
+ sort : bool = ...,
41
111
) -> DataFrame : ...
42
112
def pivot (
43
113
data : DataFrame ,
44
114
* ,
45
- index : IndexLabel = ...,
46
- columns : IndexLabel = ...,
47
- values : IndexLabel = ...,
115
+ index : _NonIterableHashable | list [ HashableT1 ] = ...,
116
+ columns : _NonIterableHashable | list [ HashableT2 ] = ...,
117
+ values : _NonIterableHashable | list [ HashableT3 ] = ...,
48
118
) -> DataFrame : ...
49
119
@overload
50
120
def crosstab (
51
121
index : list | _ExtendedAnyArrayLike | list [Sequence | _ExtendedAnyArrayLike ],
52
122
columns : list | _ExtendedAnyArrayLike | list [Sequence | _ExtendedAnyArrayLike ],
53
123
values : list | _ExtendedAnyArrayLike ,
54
- rownames : list [HashableT ] | None = ...,
55
- colnames : list [_HashableT2 ] | None = ...,
124
+ rownames : list [HashableT1 ] | None = ...,
125
+ colnames : list [HashableT2 ] | None = ...,
56
126
* ,
57
127
aggfunc : str | np .ufunc | Callable [[Series ], float ],
58
128
margins : bool = ...,
@@ -65,8 +135,8 @@ def crosstab(
65
135
index : list | _ExtendedAnyArrayLike | list [Sequence | _ExtendedAnyArrayLike ],
66
136
columns : list | _ExtendedAnyArrayLike | list [Sequence | _ExtendedAnyArrayLike ],
67
137
values : None = ...,
68
- rownames : list [HashableT ] | None = ...,
69
- colnames : list [_HashableT2 ] | None = ...,
138
+ rownames : list [HashableT1 ] | None = ...,
139
+ colnames : list [HashableT2 ] | None = ...,
70
140
aggfunc : None = ...,
71
141
margins : bool = ...,
72
142
margins_name : str = ...,
0 commit comments