我有一个包含1739行和1455列的大型数据帧.我想找到每行150个最低值(不是第150个值,而是150个值).
我用一个基本的for循环遍历行.
我尝试了df.min(axis = 1),但它只给出了一分钟.而且rolling_min函数也没有成功.
我的最终目标是取150个最低值并创建斜率然后计算曲线下面积.对每行执行此操作并添加区域以获取卷.
-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] 举报,一经查实,本站将立刻删除。