Pandas检查列值是否在其他列值之间的范围内

2024-04-28 06:14:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个新手,我相信有一个简单的方法来做到这一点,我不知道,提前感谢你的帮助。在

我有过去10年中销售团队业绩最高和最低的历史最低和最高销售数字。2016年我也有同样的情况(下面的数据示例)。在

              hist_min  hist_max   2016_min  2016_max
Day_of_Year
1               1000    10000         898     9000
2                234      896         300     1000
3               1254    23666        1000    24000
4                930    78999        1000     1050
5                278    74588         300     5000

最终目标是在matplotlib中绘制此数据,但我只想从低于hist_min列的2016_min列中获取值,同样地,只有2016_max列的值大于hist_max列。数据如下:

^{pr2}$

我把'NULL'放在那里代表空值,Nan可能更好,但我不知道matplot lib是否可以处理'Nan'数字。。。这是下一步,我很快就会知道的。在

提前感谢您的帮助, 我


Tags: of数据方法示例情况数字历史nan
2条回答

你可以通过一个条件索引一个数据帧

 df1 = df[df["2016_max"] > df["hist_max"]]

这样就可以用matplotlib轻松地打印出来了。在

^{2}$

enter image description here

^{}与返回NaNNULL或{}的布尔掩码一起使用,如果Trues:

print (df['2016_min'] > df['hist_min'])
Day_of_Year
1    False
2     True
3    False
4     True
5     True
dtype: bool

df['2016_min'] = df['2016_min'].mask(df['2016_min'] > df['hist_min'])
df['2016_max'] = df['2016_max'].mask(df['2016_max'] < df['hist_max'])
print (df)
             hist_min  hist_max  2016_min  2016_max
Day_of_Year                                        
1                1000     10000     898.0       NaN
2                 234       896       NaN    1000.0
3                1254     23666    1000.0   24000.0
4                 930     78999       NaN       NaN
5                 278     74588       NaN       NaN

^{2}$
df['2016_min'] = df['2016_min'].mask(df['2016_min'] > df['hist_min'], None)
df['2016_max'] = df['2016_max'].mask(df['2016_max'] < df['hist_max'], None)
print (df)
             hist_min  hist_max 2016_min 2016_max
Day_of_Year                                      
1                1000     10000      898     None
2                 234       896     None     1000
3                1254     23666     1000    24000
4                 930     78999     None     None
5                 278     74588     None     None

相关问题 更多 >