我有一个数据框,例如:
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
我该如何实现?
答案 0 :(得分:1)
比较掩码中的值,将链式掩码与&
进行按位比较,将DataFrame.loc
用于过滤器列C
,并获得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