假设我有一个像这样的 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
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)
此代码的工作原理如下:
groupby("Floor")
按“Floor”对数据框进行分组。["UV"]
为每组选择“UV”列。apply(lambda x: x.abs().idxmax())
来查找每组中绝对值最大的值的索引。df_1.loc[...]
选择与这些索引对应的行。此代码将为每个“Floor”组选择具有最大绝对值的 UV 值,并为您提供所需的输出:
Floor UV
3 1 -5
5 2 -15
此解决方案将为每个“Floor”组选择最大的负值(以绝对值表示)。如果一个组只有正值,它将选择该组的最大正值。