繁体   English   中英

Python Pandas 最小值最大值标志

[英]Python Pandas Flag for min max Values

我有一个 dataframe 看起来像这样:

import pandas as pd

    
d = {'Para1': ['Para1_1', 'Para1_1', 'Para1_2', 'Para1_2'], 'Para2': ['Para2_1', 'Para2_1', 'Para2_2', 'Para2_2'], 'ParaN': ['ParaN_1', 'ParaN_1', 'ParaN_2', 'ParaN_2'],'value':[0.5,0.3,0.01,0.5]}

df=pd.DataFrame(data=d)

print (df)

output:

     Para1    Para2    ParaN  value
0  Para1_1  Para2_1  ParaN_1   0.50
1  Para1_1  Para2_1  ParaN_1   0.30
2  Para1_2  Para2_2  ParaN_2   0.01
3  Para1_2  Para2_2  ParaN_2   0.50

对于 Para1 + Para2 + ParaN 的每个组合,a 有两个值。 我需要一个标志,它是最大值,它是组合的最小值。 所以它看起来像这样:

     Para1    Para2    ParaN  value   minmaxflag
0  Para1_1  Para2_1  ParaN_1   0.50    max
1  Para1_1  Para2_1  ParaN_1   0.30    min
2  Para1_2  Para2_2  ParaN_2   0.01    min
3  Para1_2  Para2_2  ParaN_2   0.50    max

我尝试过不同的东西。 但似乎没有任何事情朝着正确的方向发展。

最好的齐奥

您可以使用.replace

params = ['Para1', 'Para2', 'ParaN']

df['minmaxflag'] = df.groupby(params)['value'].transform(lambda s: s.replace({s.min(): 'min', s.max(): 'max'}))

结果:

print(df)
     Para1    Para2    ParaN  value minmaxflag
0  Para1_1  Para2_1  ParaN_1   0.50        max
1  Para1_1  Para2_1  ParaN_1   0.30        min
2  Para1_2  Para2_2  ParaN_2   0.01        min
3  Para1_2  Para2_2  ParaN_2   0.50        max

如果您每对只有一个最小值/最大值,这将为您提供您正在寻找的答案

import pandas as pd
import numpy as np

d = {'Para1': ['Para1_1', 'Para1_1', 'Para1_2', 'Para1_2'], 'Para2': ['Para2_1', 'Para2_1', 'Para2_2', 'Para2_2'], 'ParaN': ['ParaN_1', 'ParaN_1', 'ParaN_2', 'ParaN_2'],'value':[0.5,0.3,0.01,0.5]}

df=pd.DataFrame(data=d)
df['minmaxflag'] = df.groupby(['Para1', 'Para2', 'ParaN'])['value'].transform('max')
df['minmaxflag'] = np.where(df['value'] == df['minmaxflag'], 'max', 'min')
df

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM