excel 函数 pandas 搞定 轻松

ExcelIF 函数是最常用的函数之一，它可以对值和期待值进行逻辑比较。 因此IF 语句可能有两个结果： 第一个结果是比较结果为 True，第二个结果是比较结果为 False。

1. 案例需求

• 语数英三科评级，低于60分标记为不及格、60-89为及格、90分以上为高分；
• 性别中1为男性、0为女性。

2. Excel轻松搞定

=IF(B2<60,"不及格",IF(B2<90,"及格","高分"))

=IF(E2=1,"男","女")

# 语数外三科评级
=LOOKUP(B2,{0,"不及格";60,"及格";90,"高分"})
# 性别标识
=LOOKUP(E2,{0,"女";1,"男"})

3. Pandas处理

import pandas as pd
# 读取数据
# 筛选 语数外 评分
score = df.loc[:,'语文':'英语']
# 评级
data = score.where(score>100, np.where(score<60,"不及格", np.where(score<90,"及格","高分")))
# 性别
data['性别'] = df['性别'].where(df['性别']>100, np.where(df['性别']==0, '女性', '男性'))
data.insert(0,'姓名', df['姓名'])
data

df.where

Signature:
df.where(
cond,
other=nan,
inplace=False,
axis=None,
level=None,
errors='raise',
try_cast=<no_default>,
)
Docstring:
Replace values where the condition is False.

# 显示≥60的值，低于60分显示为 不及格
df[['语文','数学','英语']].where(df[['语文','数学','英语']]>60, '不及格')

np.where

Docstring:
where(condition, [x, y])
Return elements chosen from `x` or `y` depending on `condition`.
Parameters
----------
condition : array_like, bool
Where True, yield `x`, otherwise yield `y`.
x, y : array_like
Values from which to choose. `x`, `y` and `condition` need to be
Returns
-------
out : ndarray
An array with elements from `x` where `condition` is True, and elements
from `y` elsewhere.

ExcelIF函数更接近的其实就是np.where这个函数，如果条件满足则赋值x，否则赋值y

>>> import numpy as np
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.where(a < 5, a, 10*a)
array([ 0, 1, 2, 3, 4, 50, 60, 70, 80, 90])

# 如果小于60就不及格，否则再进行后面的判断
np.where(score<60,"不及格", np.where(score<90,"及格","高分"))

# 筛选 语数外 评分
score = df.loc[:,'语文':'英语']
# 评级
data = score.where(score>100, np.where(score<60,"不及格", np.where(score<90,"及格","高分")))
# 性别
data['性别'] = np.where(df['性别']==0, '女性', '男性')

4. 延伸

tips one

>>> import pandas as pd
>>> s = pd.Series(range(5))
>>> s.where(s > 0)
0 NaN
1 1.0
2 2.0
3 3.0
4 4.0
dtype: float64
0 0.0
1 NaN
2 NaN
3 NaN
4 NaN
dtype: float64
>>> s.where(s > 1, 10)
0 10
1 10
2 2
3 3
4 4
dtype: int64
0 0
1 1
2 10
3 10
4 10
dtype: int64

tips two

• 通过 自定义函数 if else来处理，然后apply或map调用
• 通过 cut分箱 来处理
• 通过 replace 来处理