[英]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.