在pandas数据帧中获取非常复杂的条件下的最大值和最小值



我有一个数据帧,例如:

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

我怎样才能做到这一点?

比较掩码中的值,将掩码与&逐位链接,并将掩码与筛选列CDataFrame.loc链接,得到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

最新更新