我有一个数据帧,例如:
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
我怎样才能做到这一点?
比较掩码中的值,将掩码与&
逐位链接,并将掩码与筛选列C
的DataFrame.loc
链接,得到min
和max
的值,最后通过构造函数创建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