我正在尝试按列对数据框进行排序。我正在编写一个函数,用于从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的前三行。
任何帮助将不胜感激。
谢谢!
答案 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