在非常复杂的条件下在熊猫数据框中获取最大值和最小值

时间:2019-11-12 08:59:08

标签: python pandas dataframe

我有一个数据框,例如:

A       B       C
1.11    NaN     1.11
1.15    0.48    0.79
1.05   -0.29    1.26
0.99    2.90    1.13
0.90   -0.03    0.55
0.80    0.29    1.45
0.75    NaN     NaN
0.73    NaN     NaN
0.77    NaN     NaN
0.81    NaN     NaN
0.85    NaN     NaN

我想获取4个值并制作一个新的数据框。

(AA)如果B列> 0且C列<1,则获取满足条件的值中的最小值C。

(BB)如果B列<0和C列<1,则在满足条件的值中获取最小值C。

(CC)如果B列> 0且C列> 1,则在满足条件的值中获取最大值C。

(DD)如果B列<0和C列> 1,则在满足条件的值中获取最大值C。

我想要的结果如下:

AA      BB      CC      DD
0.79    0.55    1.45    1.26

我将向您展示数据框的另一个示例:

A       B       C
4.56    NaN     1.77
4.15    0.91    1.17
4.20    0.09    1.14
4.41    0.08    1.07
4.67    0.19    0.93
4.85    0.19    0.82
5.45    0.43    0.52
NaN     NaN     NaN
NaN     NaN     NaN
NaN     NaN     NaN
NaN     NaN     NaN

我想要的结果如下:

AA      BB      CC      DD
0.52    NaN     1.17    NaN

我该如何实现?

1 个答案:

答案 0 :(得分:1)

比较掩码中的值,将链式掩码与&进行按位比较,将DataFrame.loc用于过滤器列C,并获得minmax值,最后创建DataFrame由构造函数:

m1 = df.B > 0
m2 = df.C < 1
m3 = df.B < 0
m4 = df.C > 1

AA = df.loc[m1 & m2, 'C'].min()
BB = df.loc[m3 & m2, 'C'].min()
CC = df.loc[m1 & m4, 'C'].max()
DD = df.loc[m3 & m4, 'C'].max()

df = pd.DataFrame([[AA, BB, CC, DD]], columns=['AA','BB','CC','DD'])
print (df)
     AA    BB    CC    DD
0  0.79  0.55  1.45  1.26

第二个DataFrame的输出:

print (df)
     AA  BB    CC  DD
0  0.52 NaN  1.17 NaN