在Python的Pandas库中,可以使用np.where()
函数或者pd.cut()
函数来模拟CASE WHEN功能。
- 使用
np.where()
函数:
np.where()
函数可以根据指定的条件返回不同的值。其语法格式为:np.where(condition, value_if_true, value_if_false)
。其中,condition
是要测试的条件,value_if_true
是条件为真时返回的值,value_if_false
是条件为假时返回的值。
例如,下面的代码将根据列A
中的值生成一个新列B
,如果A
的值大于10,则B
的值为"大于10",否则为"小于等于10":
import pandas as pd import numpy as np # 创建一个示例DataFrame df = pd.DataFrame({'A': [5, 12, 7, 15, 3]}) # 使用np.where()函数模拟CASE WHEN功能 df['B'] = np.where(df['A'] > 10, '大于10', '小于等于10') print(df)
- 使用
pd.cut()
函数:
pd.cut()
函数可以将连续型数据划分为多个区间,并返回每个数据属于哪个区间。其语法格式为:pd.cut(x, bins, labels=None, right=True, include_lowest=False)
。其中,x
是要划分的数据列,bins
是划分区间的列表,labels
是每个区间的标签(可选),right
表示区间的右侧是否包含(默认为True),include_lowest
表示是否将最小值包含在第一个区间内(默认为False)。
虽然pd.cut()
函数主要用于划分区间,但可以通过一些技巧来模拟CASE WHEN功能。例如,下面的代码将根据列A
中的值生成一个新列B
,如果A
的值大于10,则B
的值为"大于10",否则为"小于等于10":
import pandas as pd # 创建一个示例DataFrame df = pd.DataFrame({'A': [5, 12, 7, 15, 3]}) # 使用pd.cut()函数模拟CASE WHEN功能 df['B'] = pd.cut(df['A'], bins=[0, 10, np.inf], labels=['小于等于10', '大于10']) print(df)
请注意,pd.cut()
函数返回的是区间标签,而不是具体的值。如果需要返回具体的值,可以使用map()
函数将区间标签映射到具体的值。例如,可以将上面的代码修改为:
import pandas as pd # 创建一个示例DataFrame df = pd.DataFrame({'A': [5, 12, 7, 15, 3]}) # 使用pd.cut()函数获取区间标签 labels = pd.cut(df['A'], bins=[0, 10, np.inf], labels=['小于等于10', '大于10']) # 使用map()函数将区间标签映射到具体的值 df['B'] = labels.map({'小于等于10': '小于等于10', '大于10': '大于10'}) print(df)