python pandas 3最小& 3个最大值

时间:2013-12-06 03:29:53

标签: python pandas dataframe

如何在我的pandas数据框中的列中找到3个最小值和3个最大值的索引?我看到了找到最大值和最小值的方法,但没有找到3号。

5 个答案:

答案 0 :(得分:5)

你有什么尝试?您可以使用s.sort()进行排序,然后拨打s.head(3).indexs.tail(3).index

答案 1 :(得分:1)

您想查看argsortnumpypandas中)

df = pd.DataFrame(np.random.randint(1,100,100).reshape(10,10))
# bottom three indexes
df[0].argsort().values[:3]    
# top three indexes
df[0].argsort().values[-3:]

答案 2 :(得分:1)

对于较小的系列,你最好只是排序然后采取头/尾!

这是一个pandas feature request,应该在0.14中看到(需要克服一些带有不同dtypes的繁琐位),大型系列(> 1000个元素)的有效解决方案是使用来自pandas algos的kth_smallest (警告此函数会改变它所应用的数组,因此请使用副本!):

In [11]: s = pd.Series(np.random.randn(10))

In [12]: s
Out[12]: 
0    0.785650
1    0.969103
2   -0.618300
3   -0.770337
4    1.532137
5    1.367863
6   -0.852839
7    0.967317
8   -0.603416
9   -0.889278
dtype: float64

In [13]: n = 3

In [14]: pd.algos.kth_smallest(s.values.astype(float), n - 1)
Out[14]: -0.7703374582084163

In [15]: s[s <= pd.algos.kth_smallest(s.values.astype(float), n - 1)]
Out[15]: 
3   -0.770337
6   -0.852839
9   -0.889278
dtype: float64

如果你想按顺序这样做:

In [16]: s[s <= pd.algos.kth_smallest(s.values.astype(float), n - 1)].order()
Out[16]: 
9   -0.889278
6   -0.852839
3   -0.770337
dtype: float64

如果您担心重复(加入第n个地方),您可以采取行动:

In [17]: s[s <= pd.algos.kth_smallest(s.values.astype(float), n - 1)].order().head(n)
Out[17]: 
9   -0.889278
6   -0.852839
3   -0.770337
dtype: float64

答案 3 :(得分:0)

Res_Reservations::where('time_id', $time['id'])
                ->where('date',  $bus['date'])
                ->where('valid',  config('config.TYPE_SCHEDULE_UNREMOVED'))
                ->update([
                    'time_id' => $time['move'],
                    'reason' => DB::raw("CONCAT(reason, '" . $notesAdd . "')")
                ]);

答案 4 :(得分:0)

import pandas as pd
import numpy as np
np.random.seed(1)
x=np.random.randint(1,100,10)
y=np.random.randint(1000,10000,10)

x
array([38, 13, 73, 10, 76,  6, 80, 65, 17,  2])
y
array([8751, 4462, 6396, 6374, 3962, 3516, 9444, 4562, 5764, 9093])

data=pd.DataFrame({"age":x,
               "salary":y})


data.nlargest(5,"age").nsmallest(5,"salary")