排序后未保存熊猫数据框

时间:2020-03-22 19:36:13

标签: python pandas

我正在尝试按列对数据框进行排序。我正在编写一个函数,用于从n列返回前totals个结果。

这是我的功能:

def get_most(self, column, amt):
        most = OrderedDict()
        self.data = self.data.sort_values(by=[column])
        for i in range(amt):
            most.update({i : self.data.loc[i, :]})
        return most

当我这样调用函数时:

most_amt = self.get_most('Total', 3)
    for key, value in most_amt.items():
        print(key, value)

它返回排序之前数据帧中的前3行。我还尝试过使用inplace属性,如下所示:

self.data.sort_values(by=[column], inplace=True)

但无济于事。

该应用程序本身是我为自己制作的一个小跟踪器,用于跟踪冠状病毒的传播。我正在使用来自github存储库的数据,输入的数据是312行的csv文件。前三行是(我在此问题上添加了空格,以使其更易于阅读,实际文件中没有空格):

Hubei,China,2020-03-21T10:13:08,67800,3139,58946
NaN,  Italy,2020-03-21T17:43:03,53578,4825, 6072
NaN,  Spain,2020-03-21T13:13:30,25374,1375, 2125
etc. etc
NaN,  China, 2020-03-23,        81305,3259,71857
NaN,  US,    2020-03-23,        25493, 307,  171

那么我的预期输出将是:

NaN,  China, 2020-03-23,        81305,3259,71857
NaN,  Italy,2020-03-21T17:43:03,53578,4825, 6072
NaN,  US,    2020-03-23,        25493, 307,  171

相反,它只是CSV的前三行。

任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为这是正确的方法。意识到In [20]中的命令将返回一个新的数据帧。

In [17]: data = {'zone':['us', 'italy', 'china', 'south pole'], 
    ...:         'qty': [ 10, 40, 12, 3]}                                       

In [18]: df = pd.DataFrame(data)                                                

In [19]: df                                                                     
Out[19]: 
         zone  qty
0          us   10
1       italy   40
2       china   12
3  south pole    3

In [20]: df.sort_values('qty', ascending=False)[:3]    #top 3                   
Out[20]: 
    zone  qty
1  italy   40
2  china   12
0     us   10