File tree 3 files changed +25
-8
lines changed
3 files changed +25
-8
lines changed Original file line number Diff line number Diff line change @@ -201,6 +201,8 @@ pandas 0.9.0
201
201
size cutoff (#1821)
202
202
- Handle list keys in addition to tuples in DataFrame.xs when
203
203
partial-indexing a hierarchically-indexed DataFrame (#1796)
204
+ - Support multiple column selection in DataFrame.__getitem__ with duplicate
205
+ columns (#1943)
204
206
205
207
pandas 0.8.1
206
208
============
Original file line number Diff line number Diff line change @@ -1707,14 +1707,18 @@ def _getitem_array(self, key):
1707
1707
inds , = key .nonzero ()
1708
1708
return self .take (inds )
1709
1709
else :
1710
- indexer = self .columns .get_indexer (key )
1711
- mask = indexer == - 1
1712
- if mask .any ():
1713
- raise KeyError ("No column(s) named: %s" % str (key [mask ]))
1714
- result = self .reindex (columns = key )
1715
- if result .columns .name is None :
1716
- result .columns .name = self .columns .name
1717
- return result
1710
+ if self .columns .is_unique :
1711
+ indexer = self .columns .get_indexer (key )
1712
+ mask = indexer == - 1
1713
+ if mask .any ():
1714
+ raise KeyError ("No column(s) named: %s" % str (key [mask ]))
1715
+ result = self .reindex (columns = key )
1716
+ if result .columns .name is None :
1717
+ result .columns .name = self .columns .name
1718
+ return result
1719
+ else :
1720
+ mask = self .columns .isin (key )
1721
+ return self .take (mask .nonzero ()[0 ], axis = 1 )
1718
1722
1719
1723
def _slice (self , slobj , axis = 0 ):
1720
1724
if axis == 0 :
Original file line number Diff line number Diff line change @@ -1076,6 +1076,17 @@ def test_getitem_ix_boolean_duplicates_multiple(self):
1076
1076
exp = df [df [0 ] > 0 ]
1077
1077
assert_frame_equal (result , exp )
1078
1078
1079
+ def test_getitem_list_duplicates (self ):
1080
+ # #1943
1081
+ df = DataFrame (np .random .randn (4 ,4 ), columns = list ('AABC' ))
1082
+ df .columns .name = 'foo'
1083
+
1084
+ result = df [['B' , 'C' ]]
1085
+ self .assert_ (result .columns .name == 'foo' )
1086
+
1087
+ expected = df .ix [:, 2 :]
1088
+ assert_frame_equal (result , expected )
1089
+
1079
1090
def test_get_value (self ):
1080
1091
for idx in self .frame .index :
1081
1092
for col in self .frame .columns :
You can’t perform that action at this time.
0 commit comments