【发布时间】:2019-07-19 06:39:25
【问题描述】:
我有一个包含 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 循环将一次遍历每一行。
【问题讨论】:
-
你能对数组进行排序吗?如果是这样,请尝试对其进行排序,将其保存在临时数组中并获取 150 个元素的子列表
-
只是为了澄清我自己的想法,对于所有 1739 行,您想要每行中最小的 150 个值吗?
-
@Talik 是的,如果我可以对数组进行排序,那可以工作。但随后我将不得不对其进行 1739 次排序(每行一个)。
-
不,你只是沿第一个轴排序:
np.sort(df.values, 1)[:, 0:150] -
@d_kennetz 是的,这正是我所需要的。