@@ -1473,7 +1473,7 @@ def duplicated(self, col_or_columns=None, take_last=False):
1473
1473
#----------------------------------------------------------------------
1474
1474
# Sorting
1475
1475
1476
- def sort (self , column = None , axis = 0 , ascending = True ):
1476
+ def sort (self , columns = None , axis = 0 , ascending = True ):
1477
1477
"""
1478
1478
Sort DataFrame either by labels (along either axis) or by the values in
1479
1479
a column
@@ -1492,9 +1492,9 @@ def sort(self, column=None, axis=0, ascending=True):
1492
1492
sorted : DataFrame
1493
1493
"""
1494
1494
by = None
1495
- if column :
1495
+ if columns :
1496
1496
assert (axis == 0 )
1497
- by = self [column ]. values
1497
+ by = self [columns ]
1498
1498
return self .sort_index (by = by , axis = axis , ascending = ascending )
1499
1499
1500
1500
def sort_index (self , axis = 0 , by = None , ascending = True ):
@@ -1507,7 +1507,7 @@ def sort_index(self, axis=0, by=None, ascending=True):
1507
1507
axis : {0, 1}
1508
1508
Sort index/rows versus columns
1509
1509
by : object
1510
- Column name in frame
1510
+ Columns in frame
1511
1511
ascending : boolean, default True
1512
1512
Sort ascending vs. descending
1513
1513
@@ -1516,17 +1516,24 @@ def sort_index(self, axis=0, by=None, ascending=True):
1516
1516
sorted : DataFrame
1517
1517
"""
1518
1518
labels = self ._get_axis (axis )
1519
-
1519
+ order_list = None
1520
1520
if by is not None :
1521
- try :
1521
+ try :
1522
1522
if by in self .columns :
1523
1523
assert (axis == 0 )
1524
- by = self [by ]. values
1524
+ by = self [by ]
1525
1525
except Exception :
1526
1526
pass
1527
1527
1528
1528
assert (len (by ) == len (labels ))
1529
- sort_index = Series (by , index = labels ).order ().index
1529
+
1530
+ if isinstance (by , Series ):
1531
+ by = by .values
1532
+ sort_index = Series (by , index = labels ).order ().index
1533
+ elif isinstance (by , DataFrame ):
1534
+ type_list = [(col_name , by [col_name ].dtype ) for col_name in by .columns ]
1535
+ sort_arr = np .array ([tuple (r ) for r in by .values ], dtype = type_list )
1536
+ sort_index = labels .take (sort_arr .argsort (order = by .columns ))
1530
1537
else :
1531
1538
sort_index = labels .take (labels .argsort ())
1532
1539
@@ -2499,6 +2506,20 @@ def corr(self):
2499
2506
2500
2507
return self ._constructor (correl , index = cols , columns = cols )
2501
2508
2509
+ def cov (self ):
2510
+ """
2511
+ Compute pairwise covariance of columns, excluding NA/null values
2512
+
2513
+ Returns
2514
+ -------
2515
+ y : DataFrame
2516
+ """
2517
+ cols = self .columns
2518
+ mat = self .as_matrix (cols ).T
2519
+ baseCov = np .cov (mat )
2520
+
2521
+ return self ._constructor (baseCov , index = cols , columns = cols )
2522
+
2502
2523
def corrwith (self , other , axis = 0 , drop = False ):
2503
2524
"""
2504
2525
Compute pairwise correlation between rows or columns of two DataFrame
0 commit comments