【问题标题】:Finding rows with highest means in dataframe在数据框中查找具有最高均值的行
【发布时间】:2019-07-12 04:45:12
【问题描述】:

我试图在一个非常大的数据框中找到具有最高均值的行。

原因:我用激光跟踪仪扫描了一些东西,并使用“更高”点作为扫描开始的参考点。我试图通过我的数据找到放置的对象。

我计算了每一行的平均值:

base = df.mean(axis=1)
base.columns = ['index','Mean']

以下是每行平均值的示例:

0       4.407498
1       4.463597
2       4.611886
3       4.710751
4       4.742491
5       4.580945

这似乎工作正常,除了它添加了一个索引列,并给出了具有 float64 类型索引的列。 然后我试着用这个来找到平均值最高的行:

moy = base.loc[base.reset_index().groupby(['index'])['Mean'].idxmax()]

这给出了tis:

 index      Mean
0         0  4.407498
1         1  4.463597
2         2  4.611886
3         3  4.710751
4         4  4.742491
5         5  4.580945

但它只是重新索引(我现在有 3 列而不是 2 列)并且什么都不做。它仍然显示所有行。

【问题讨论】:

  • 我认为输出样本和输入样本在这里回答您的问题有点关键。但听起来您已经定义了自己的索引和平均列(基于您之前的 df 中的其他列),现在有了第三列,可能是创建的数据框的已创建索引。
  • 是的,新列是(第二个索引)可能来自新数据框的创建。
  • 我似乎无法手动索引'base',它说:AttributeError:'Series'对象没有属性'set_index'当我使用时:base.set_index('index')
  • 你的数据集是一个序列,你需要将列均值分成两列。

标签: python pandas group-by filtering identity-column


【解决方案1】:

这是一种不使用groupby的方法

moy=base.sort_values('Mean').tail(1)

【讨论】:

  • 这很好用!你会知道如何拥有超过 1 行吗?现在,它只显示第 319 行,我需要更多。
  • @Mat17 tail(n) n 是你需要的行
【解决方案2】:

您的数据看起来好像是一个字符串或单列,两个数字之间有一个空格。建议将列分成两列和/或使用类似于下面的内容将索引设置为您感兴趣的特定列。

import pandas as pd

df = pd.read_csv('testdata.txt', names=["Index", "Mean"], delimiter="\s+")
df = df.set_index("Index")
print(df)

【讨论】:

  • 我没有看到分隔列的意义,我会丢失索引号对吗?
  • 索引与列保持关联
  • 把它想象成 Excel 电子表格侧面的数字。您也可以将它们设置为唯一的特定数字。您还可以根据该组值将其与原始 df 合并。
  • 我试试看!谢谢:)
猜你喜欢
  • 2019-04-11
  • 1970-01-01
  • 2019-12-01
  • 2012-11-05
  • 1970-01-01
  • 2013-07-24
  • 2021-06-16
  • 2019-06-01
  • 2018-12-20
相关资源
最近更新 更多