微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 为数据帧中的每一行查找n个最低值

我有一个包含1739行和1455列的大型数据帧.我想找到每行150个最低值(不是第150个值,而是150个值).

我用一个基本的for循环遍历行.

我尝试了df.min(axis = 1),但它只给出了一分钟.而且rolling_min函数也没有成功.

是否有任何现有功能,我可以输入我想找到的值的数量.min?

我的最终目标是取150个最低值并创建斜率然后计算曲线下面积.对每行执行此操作并添加区域以获取卷.

数据帧的示例,我有一个看起来像这样的df:

     -218.7     -218.4    ...          217.2      217.5
0     56.632706  13.638315    ...      76.543000  76.543000
1     56.633455  13.576762    ...      76.543000  76.543000
2    -18.432203 -18.384091    ...      76.543000  76.543000
3    -18.476594 -18.439804    ...      76.543000  76.543000

标题是’-218.7 …’,它是扫描的x轴中的坐标.数据是y轴扫描的高度.我需要的是每行150个最低值以及相关的列标题,因为我想为每一行制作一条曲线然后计算曲线下面积.

所以我需要为每一行这样的东西:

         -218.7     -218.4    ... for 150 columns
4    -18.532035 -18.497517    ... for 150 values

我不认为我需要存储每行的标题信息,for循环将逐个通过每一行.

解决方法:

使用.argsort来获取基础数组的索引.切片值和列索引以获取所需的所有信息.我们将创建一个MultiIndex,以便我们可以将列标题和值存储在同一个DataFrame中.第一级将是您的原始索引.

例:

import pandas as pd
import numpy as np

np.random.seed(1)
df = pd.DataFrame(np.random.randint(1,100000, (1739, 26)))
df.columns = list('ABCDEFGHIJKLMnopQRSTUVWXYZ')

N = 7  # 150 in your case
idx = np.argsort(df.values, 1)[:, 0:N]

pd.concat([pd.DataFrame(df.values.take(idx), index=df.index),
           pd.DataFrame(df.columns[idx], index=df.index)],
           keys=['Value', 'Columns']).sort_index(level=1)

输出

                 0      1      2      3      4      5      6
Columns 0        C      K      U      V      I      G      P
Value   0     5193   7752   8445  19947  20610  21441  21759
Columns 1        R      J      W      C      B      D      G
Value   1      432   3607  16278  17138  19434  26104  33879
Columns 2        K      S      E      F      M      O      U
Value   2       16   1047   1845   9553  12314  13784  19432
Columns 3        K      Q      A      S      X      W      G
Value   3      244   5272  10836  13682  29237  33230  34448
Columns 4        K      T      L      U      C      D      M
Value   4     9765  11275  13160  22808  30870  33484  42760
...
Columns 1736     I      L      U      W      B      X      N
Value   1736  7099   7922  11047  12613  15502  18409  21576
Columns 1737     J      K      E      V      O      M      S
Value   1737  3000   5538   7933  13777  17310  22640  24750
Columns 1738     O      U      A      X      E      I      F
Value   1738  5118   5775  10267  11320  17659  30055  30702

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐