Pandas,如何将第 1 列按第 2 列与第 1 列的绝对最大值分组,而不将第 1 列更改为绝对值?

问题描述 投票:0回答:1

假设我有一个像这样的 df_1 : 地板紫外线 1 1 -2 2 1 3 3 1 -5 4 1 4 5 2 14 6 2 -15

我写了这段代码: output_df = df_1.loc[df_1.groupby("楼层")["UV"].idxmax()] 上面的代码给了我: 地板紫外线 1 1 3 2 2 14

我想要的结果是: 地板紫外线 1 1 -5 2 2 -15

pandas group-by
1个回答
0
投票
import pandas as pd
import numpy as np

# Create the example dataframe
data = {'Floor': [1, 1, 1, 1, 2, 2],
        'UV': [1, -2, 3, -5, 14, -15]}
df_1 = pd.DataFrame(data)

# Select the UV value with the maximum absolute value for each "Floor" group
output_df = df_1.loc[df_1.groupby("Floor")["UV"].apply(lambda x: x.abs().idxmax())]

print(output_df)

此代码的工作原理如下:

  1. 我们使用
    groupby("Floor")
    按“Floor”对数据框进行分组。
  2. 我们使用
    ["UV"]
    为每组选择“UV”列。
  3. 我们使用
    apply(lambda x: x.abs().idxmax())
    来查找每组中绝对值最大的值的索引。
  4. 我们使用
    df_1.loc[...]
    选择与这些索引对应的行。

此代码将为每个“Floor”组选择具有最大绝对值的 UV 值,并为您提供所需的输出:

   Floor  UV
3      1  -5
5      2 -15

此解决方案将为每个“Floor”组选择最大的负值(以绝对值表示)。如果一个组只有正值,它将选择该组的最大正值。

© www.soinside.com 2019 - 2024. All rights reserved.