@@ -68,3 +68,63 @@ def fn(x):
68
68
name = "col2" ,
69
69
)
70
70
tm .assert_series_equal (result , expected )
71
+
72
+
73
+ def test_apply_mutate_columns_multiindex ():
74
+ # GH 12652
75
+ df = pd .DataFrame (
76
+ {
77
+ ("C" , "julian" ): [1 , 2 , 3 ],
78
+ ("B" , "geoffrey" ): [1 , 2 , 3 ],
79
+ ("A" , "julian" ): [1 , 2 , 3 ],
80
+ ("B" , "julian" ): [1 , 2 , 3 ],
81
+ ("A" , "geoffrey" ): [1 , 2 , 3 ],
82
+ ("C" , "geoffrey" ): [1 , 2 , 3 ],
83
+ },
84
+ columns = pd .MultiIndex .from_tuples (
85
+ [
86
+ ("A" , "julian" ),
87
+ ("A" , "geoffrey" ),
88
+ ("B" , "julian" ),
89
+ ("B" , "geoffrey" ),
90
+ ("C" , "julian" ),
91
+ ("C" , "geoffrey" ),
92
+ ]
93
+ ),
94
+ )
95
+
96
+ def add_column (grouped ):
97
+ name = grouped .columns [0 ][1 ]
98
+ grouped ["sum" , name ] = grouped .sum (axis = 1 )
99
+ return grouped
100
+
101
+ result = df .groupby (level = 1 , axis = 1 ).apply (add_column )
102
+ expected = pd .DataFrame (
103
+ [
104
+ [1 , 1 , 1 , 3 , 1 , 1 , 1 , 3 ],
105
+ [2 , 2 , 2 , 6 , 2 , 2 , 2 , 6 ],
106
+ [
107
+ 3 ,
108
+ 3 ,
109
+ 3 ,
110
+ 9 ,
111
+ 3 ,
112
+ 3 ,
113
+ 3 ,
114
+ 9 ,
115
+ ],
116
+ ],
117
+ columns = pd .MultiIndex .from_tuples (
118
+ [
119
+ ("geoffrey" , "A" , "geoffrey" ),
120
+ ("geoffrey" , "B" , "geoffrey" ),
121
+ ("geoffrey" , "C" , "geoffrey" ),
122
+ ("geoffrey" , "sum" , "geoffrey" ),
123
+ ("julian" , "A" , "julian" ),
124
+ ("julian" , "B" , "julian" ),
125
+ ("julian" , "C" , "julian" ),
126
+ ("julian" , "sum" , "julian" ),
127
+ ]
128
+ ),
129
+ )
130
+ tm .assert_frame_equal (result , expected )
0 commit comments