|
8 | 8 |
|
9 | 9 | from pandas import Series, DataFrame, Panel, bdate_range, isnull, notnull
|
10 | 10 | from pandas.util.testing import (
|
11 |
| - assert_almost_equal, assert_series_equal, assert_frame_equal, assert_panel_equal |
| 11 | + assert_almost_equal, assert_series_equal, assert_frame_equal, assert_panel_equal, assert_index_equal |
12 | 12 | )
|
13 | 13 | import pandas.core.datetools as datetools
|
14 | 14 | import pandas.stats.moments as mom
|
@@ -970,6 +970,119 @@ def test_expanding_corr_pairwise_diff_length(self):
|
970 | 970 | assert_frame_equal(result2, expected)
|
971 | 971 | assert_frame_equal(result3, expected)
|
972 | 972 | assert_frame_equal(result4, expected)
|
| 973 | + |
| 974 | + def test_pairwise_stats_column_names_order(self): |
| 975 | + # GH 7738 |
| 976 | + df1s = [DataFrame([[2,4],[1,2],[5,2],[8,1]], columns=[0,1]), |
| 977 | + DataFrame([[2,4],[1,2],[5,2],[8,1]], columns=[1,0]), |
| 978 | + DataFrame([[2,4],[1,2],[5,2],[8,1]], columns=[1,1]), |
| 979 | + DataFrame([[2,4],[1,2],[5,2],[8,1]], columns=['C','C']), |
| 980 | + DataFrame([[2,4],[1,2],[5,2],[8,1]], columns=[1.,0]), |
| 981 | + DataFrame([[2,4],[1,2],[5,2],[8,1]], columns=[0.,1]), |
| 982 | + DataFrame([[2,4],[1,2],[5,2],[8,1]], columns=['C',1]), |
| 983 | + DataFrame([[2.,4.],[1.,2.],[5.,2.],[8.,1.]], columns=[1,0.]), |
| 984 | + DataFrame([[2,4.],[1,2.],[5,2.],[8,1.]], columns=[0,1.]), |
| 985 | + DataFrame([[2,4],[1,2],[5,2],[8,1.]], columns=[1.,'X']), |
| 986 | + ] |
| 987 | + df2 = DataFrame([[None,1,1],[None,1,2],[None,3,2],[None,8,1]], columns=['Y','Z','X']) |
| 988 | + s = Series([1,1,3,8]) |
| 989 | + |
| 990 | + # DataFrame methods (which do not call _flex_binary_moment()) |
| 991 | + for f in [lambda x: x.cov(), |
| 992 | + lambda x: x.corr(), |
| 993 | + ]: |
| 994 | + results = [f(df) for df in df1s] |
| 995 | + for (df, result) in zip(df1s, results): |
| 996 | + assert_index_equal(result.index, df.columns) |
| 997 | + assert_index_equal(result.columns, df.columns) |
| 998 | + for i, result in enumerate(results): |
| 999 | + if i > 0: |
| 1000 | + self.assert_numpy_array_equivalent(result, results[0]) |
| 1001 | + |
| 1002 | + # DataFrame with itself, pairwise=True |
| 1003 | + for f in [lambda x: mom.expanding_cov(x, pairwise=True), |
| 1004 | + lambda x: mom.expanding_corr(x, pairwise=True), |
| 1005 | + lambda x: mom.rolling_cov(x, window=3, pairwise=True), |
| 1006 | + lambda x: mom.rolling_corr(x, window=3, pairwise=True), |
| 1007 | + lambda x: mom.ewmcov(x, com=3, pairwise=True), |
| 1008 | + lambda x: mom.ewmcorr(x, com=3, pairwise=True), |
| 1009 | + ]: |
| 1010 | + results = [f(df) for df in df1s] |
| 1011 | + for (df, result) in zip(df1s, results): |
| 1012 | + assert_index_equal(result.items, df.index) |
| 1013 | + assert_index_equal(result.major_axis, df.columns) |
| 1014 | + assert_index_equal(result.minor_axis, df.columns) |
| 1015 | + for i, result in enumerate(results): |
| 1016 | + if i > 0: |
| 1017 | + self.assert_numpy_array_equivalent(result, results[0]) |
| 1018 | + |
| 1019 | + # DataFrame with itself, pairwise=False |
| 1020 | + for f in [lambda x: mom.expanding_cov(x, pairwise=False), |
| 1021 | + lambda x: mom.expanding_corr(x, pairwise=False), |
| 1022 | + lambda x: mom.rolling_cov(x, window=3, pairwise=False), |
| 1023 | + lambda x: mom.rolling_corr(x, window=3, pairwise=False), |
| 1024 | + lambda x: mom.ewmcov(x, com=3, pairwise=False), |
| 1025 | + lambda x: mom.ewmcorr(x, com=3, pairwise=False), |
| 1026 | + ]: |
| 1027 | + results = [f(df) for df in df1s] |
| 1028 | + for (df, result) in zip(df1s, results): |
| 1029 | + assert_index_equal(result.index, df.index) |
| 1030 | + assert_index_equal(result.columns, df.columns) |
| 1031 | + for i, result in enumerate(results): |
| 1032 | + if i > 0: |
| 1033 | + self.assert_numpy_array_equivalent(result, results[0]) |
| 1034 | + |
| 1035 | + # DataFrame with another DataFrame, pairwise=True |
| 1036 | + for f in [lambda x, y: mom.expanding_cov(x, y, pairwise=True), |
| 1037 | + lambda x, y: mom.expanding_corr(x, y, pairwise=True), |
| 1038 | + lambda x, y: mom.rolling_cov(x, y, window=3, pairwise=True), |
| 1039 | + lambda x, y: mom.rolling_corr(x, y, window=3, pairwise=True), |
| 1040 | + lambda x, y: mom.ewmcov(x, y, com=3, pairwise=True), |
| 1041 | + lambda x, y: mom.ewmcorr(x, y, com=3, pairwise=True), |
| 1042 | + ]: |
| 1043 | + results = [f(df, df2) for df in df1s] |
| 1044 | + for (df, result) in zip(df1s, results): |
| 1045 | + assert_index_equal(result.items, df.index) |
| 1046 | + assert_index_equal(result.major_axis, df.columns) |
| 1047 | + assert_index_equal(result.minor_axis, df2.columns) |
| 1048 | + for i, result in enumerate(results): |
| 1049 | + if i > 0: |
| 1050 | + self.assert_numpy_array_equivalent(result, results[0]) |
| 1051 | + |
| 1052 | + # DataFrame with another DataFrame, pairwise=False |
| 1053 | + for f in [lambda x, y: mom.expanding_cov(x, y, pairwise=False), |
| 1054 | + lambda x, y: mom.expanding_corr(x, y, pairwise=False), |
| 1055 | + lambda x, y: mom.rolling_cov(x, y, window=3, pairwise=False), |
| 1056 | + lambda x, y: mom.rolling_corr(x, y, window=3, pairwise=False), |
| 1057 | + lambda x, y: mom.ewmcov(x, y, com=3, pairwise=False), |
| 1058 | + lambda x, y: mom.ewmcorr(x, y, com=3, pairwise=False), |
| 1059 | + ]: |
| 1060 | + results = [f(df, df2) if df.columns.is_unique else None for df in df1s] |
| 1061 | + for (df, result) in zip(df1s, results): |
| 1062 | + if result is not None: |
| 1063 | + expected_index = df.index.union(df2.index) |
| 1064 | + expected_columns = df.columns.union(df2.columns) |
| 1065 | + assert_index_equal(result.index, expected_index) |
| 1066 | + assert_index_equal(result.columns, expected_columns) |
| 1067 | + else: |
| 1068 | + tm.assertRaisesRegexp(ValueError, "'arg1' columns are not unique", f, df, df2) |
| 1069 | + tm.assertRaisesRegexp(ValueError, "'arg2' columns are not unique", f, df2, df) |
| 1070 | + |
| 1071 | + # DataFrame with a Series |
| 1072 | + for f in [lambda x, y: mom.expanding_cov(x, y), |
| 1073 | + lambda x, y: mom.expanding_corr(x, y), |
| 1074 | + lambda x, y: mom.rolling_cov(x, y, window=3), |
| 1075 | + lambda x, y: mom.rolling_corr(x, y, window=3), |
| 1076 | + lambda x, y: mom.ewmcov(x, y, com=3), |
| 1077 | + lambda x, y: mom.ewmcorr(x, y, com=3), |
| 1078 | + ]: |
| 1079 | + results = [f(df, s) for df in df1s] + [f(s, df) for df in df1s] |
| 1080 | + for (df, result) in zip(df1s, results): |
| 1081 | + assert_index_equal(result.index, df.index) |
| 1082 | + assert_index_equal(result.columns, df.columns) |
| 1083 | + for i, result in enumerate(results): |
| 1084 | + if i > 0: |
| 1085 | + self.assert_numpy_array_equivalent(result, results[0]) |
973 | 1086 |
|
974 | 1087 | def test_rolling_skew_edge_cases(self):
|
975 | 1088 |
|
|
0 commit comments