@@ -1103,3 +1103,120 @@ def test_merge_asof() -> None:
11031103 ),
11041104 pd .DataFrame ,
11051105 )
1106+
1107+
1108+ def test_crosstab_args () -> None :
1109+ a = [1 , 2 , 3 , 4 , 1 , 2 , 3 , 4 , 1 , 2 ]
1110+ b : list = [4 , 5 , 6 , 3 , 4 , 3 , 5 , 6 , 5 , 5 ]
1111+ c = [1 , 3 , 2 , 3 , 1 , 2 , 3 , 1 , 3 , 2 ]
1112+ check (assert_type (pd .crosstab (a , b ), pd .DataFrame ), pd .DataFrame )
1113+ check (assert_type (pd .crosstab (a , [b , c ]), pd .DataFrame ), pd .DataFrame )
1114+ check (
1115+ assert_type (pd .crosstab (np .array (a ), np .array (b )), pd .DataFrame ), pd .DataFrame
1116+ )
1117+ check (
1118+ assert_type (pd .crosstab (np .array (a ), [np .array (b ), np .array (c )]), pd .DataFrame ),
1119+ pd .DataFrame ,
1120+ )
1121+ check (
1122+ assert_type (pd .crosstab (pd .Series (a ), pd .Series (b )), pd .DataFrame ), pd .DataFrame
1123+ )
1124+ check (
1125+ assert_type (pd .crosstab (pd .Index (a ), pd .Index (b )), pd .DataFrame ), pd .DataFrame
1126+ )
1127+ check (
1128+ assert_type (pd .crosstab (pd .Categorical (a ), pd .Categorical (b )), pd .DataFrame ),
1129+ pd .DataFrame ,
1130+ )
1131+ check (
1132+ assert_type (
1133+ pd .crosstab (pd .Series (a ), [pd .Series (b ), pd .Series (c )]), pd .DataFrame
1134+ ),
1135+ pd .DataFrame ,
1136+ )
1137+ values = [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
1138+ check (
1139+ assert_type (pd .crosstab (a , b , values = values , aggfunc = np .sum ), pd .DataFrame ),
1140+ pd .DataFrame ,
1141+ )
1142+ check (
1143+ assert_type (
1144+ pd .crosstab (a , b , values = pd .Index (values ), aggfunc = np .sum ), pd .DataFrame
1145+ ),
1146+ pd .DataFrame ,
1147+ )
1148+ with pytest .warns (FutureWarning ):
1149+ check (
1150+ assert_type (
1151+ pd .crosstab (a , b , values = pd .Categorical (values ), aggfunc = np .sum ),
1152+ pd .DataFrame ,
1153+ ),
1154+ pd .DataFrame ,
1155+ )
1156+ check (
1157+ assert_type (
1158+ pd .crosstab (a , b , values = np .array (values ), aggfunc = np .sum ), pd .DataFrame
1159+ ),
1160+ pd .DataFrame ,
1161+ )
1162+
1163+ check (
1164+ assert_type (
1165+ pd .crosstab (a , b , values = pd .Series (values ), aggfunc = np .sum ), pd .DataFrame
1166+ ),
1167+ pd .DataFrame ,
1168+ )
1169+ check (
1170+ assert_type (pd .crosstab (a , b , values = values , aggfunc = np .mean ), pd .DataFrame ),
1171+ pd .DataFrame ,
1172+ )
1173+ check (
1174+ assert_type (pd .crosstab (a , b , values = values , aggfunc = "mean" ), pd .DataFrame ),
1175+ pd .DataFrame ,
1176+ )
1177+
1178+ def m (x : pd .Series ) -> float :
1179+ return x .sum () / len (x )
1180+
1181+ check (
1182+ assert_type (pd .crosstab (a , b , values = values , aggfunc = m ), pd .DataFrame ),
1183+ pd .DataFrame ,
1184+ )
1185+
1186+ def m2 (x : pd .Series ) -> int :
1187+ return int (x .sum ())
1188+
1189+ check (
1190+ assert_type (pd .crosstab (a , b , values = values , aggfunc = m2 ), pd .DataFrame ),
1191+ pd .DataFrame ,
1192+ )
1193+ check (
1194+ assert_type (
1195+ pd .crosstab (a , b , margins = True , margins_name = "something" ), pd .DataFrame
1196+ ),
1197+ pd .DataFrame ,
1198+ )
1199+ check (
1200+ assert_type (pd .crosstab (a , b , margins = True , dropna = True ), pd .DataFrame ),
1201+ pd .DataFrame ,
1202+ )
1203+ check (
1204+ assert_type (pd .crosstab (a , b , colnames = ["a" ], rownames = ["b" ]), pd .DataFrame ),
1205+ pd .DataFrame ,
1206+ )
1207+ rownames : list [tuple ] = [("b" , 1 )]
1208+ colnames : list [tuple ] = [("a" ,)]
1209+ check (
1210+ assert_type (
1211+ pd .crosstab (a , b , colnames = colnames , rownames = rownames ),
1212+ pd .DataFrame ,
1213+ ),
1214+ pd .DataFrame ,
1215+ )
1216+ check (assert_type (pd .crosstab (a , b , normalize = 0 ), pd .DataFrame ), pd .DataFrame )
1217+ check (assert_type (pd .crosstab (a , b , normalize = 1 ), pd .DataFrame ), pd .DataFrame )
1218+ check (assert_type (pd .crosstab (a , b , normalize = "all" ), pd .DataFrame ), pd .DataFrame )
1219+ check (assert_type (pd .crosstab (a , b , normalize = "index" ), pd .DataFrame ), pd .DataFrame )
1220+ check (
1221+ assert_type (pd .crosstab (a , b , normalize = "columns" ), pd .DataFrame ), pd .DataFrame
1222+ )
0 commit comments