【问题标题】:How do I get the Index of the max value in a column so I can get a value from a different column but same row?如何获取列中最大值的索引,以便我可以从不同列但同一行获取值?
【发布时间】:2022-01-18 20:46:36
【问题描述】:

熊猫数据框的输出:

          Date   Time      Hi      Lo    Open   Close Volume
0   2021-12-10   4:00  174.80  174.56  174.73   174.8    953
1   2021-12-10   4:01  174.78  174.78  174.78  174.78    100
2   2021-12-10   4:02  174.90  174.75   174.8  174.75    627
3   2021-12-10   4:03  174.93  174.91  174.91  174.93    268
4   2021-12-10   4:04  174.92  174.92  174.92  174.92    300

下面的代码将获得 Hi 列中的最高点:

df['Date'] = pd.to_datetime(df['Date'],infer_datetime_format=True)
df = df[(df['Time'] >= "4:01") & (df['Time'] <= "4:04")]['Hi'].max()

从这里开始,我试图获取 Hi 中最大值所在行的索引。

下面有人推荐的代码:

df.loc[df[(df['Time'] >= "4:01") & (df['Time'] <= "4:04")]['Hi'].idxmax()]

但是如果我运行代码,它会给我这个输出:

TypeError: reduction operation 'argmax' not allowed for this dtype is the call back

我想要的输出是:

HOD Time is 4:03

【问题讨论】:

  • 你的示例数据和代码为我工作
  • 对我也有用,也许升级你的 numpy/pandas?
  • 卸载了两者并再次安装它们仍然遇到同样的问题@Quang

标签: python pandas csv argmax


【解决方案1】:

要获取最大 Hi 的索引,您可以使用:

maxIdx = df.Hi.idxmax()

对于您的数据样本,它是 3

要从该行获取 Hi 列,请使用:

df.loc[maxIdx, 'Hi']

对于您的数据样本,它是 174.93

要从此行获取时间,请使用:

df.loc[maxIdx, 'Time']

【讨论】:

  • 你给我的第一段代码输出了这个:TypeError: reduction operation 'argmax' not allowed for this dtype@Valdi_Bo
  • 显然您的实际源数据有问题。从仅包含您提供的文本的源文件中读取 df,使用例如pd.read_fwf。要将 Date 转换为 datetime,请将 parse_dates 与相应的列号一起传递。然后在这个 DataFrame 上运行我的代码。然后将此测试 DataFrame 与您的“实际”DataFrame 进行比较,找出实际问题出在哪里。
  • 也许例如您的 Hi 列是 Categorical 类型的吗?它应该只是 float.
  • Hi 列是一个对象,但将其更改为 float64 并且仍然提供相同的输出 @Valdi_Bo
  • 此列的Object 类型表明某些行的内容有误。可以包含例如非数字字符。将您的源数据按顺序排列。只有这样你才能使用 Pandas 处理它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
  • 2022-07-25
  • 2016-07-09
相关资源
最近更新 更多