【发布时间】:2021-08-05 16:11:32
【问题描述】:
我正在尝试编写一个在 2 个数据帧之间映射并根据条件返回值的函数。一种是映射 DF,如下所示。
data1 = {'variable':['A','A','A','B','B','C','C'],
'lower' : [0,100,200,0,5,1,4],
'upper' : [100,200,300,5,10,4,8],
'value' : [32,15,45,18,46,33,45]}
df1 = pd.DataFrame(data1, columns = ['variable','lower', 'upper','value'])
print(df1)
另一个是我将应用映射的 DF,如下所示。
data2 = {'A':[23,244,131,54,258,117,43,224],
'B' : [0,2,1,9,7,4,6,3],
'C' : [2,1,7,4,8,3,8,1]}
df2 = pd.DataFrame(data2, columns = ['A','B', 'C'])
print(df2)
我要做的是创建新列mapped_A,它将检查DF 的所有行与A 的映射,并根据上限和下限返回值。例如mapped_A 列的第一行将是32,因为0 < 23 <= 100。与列 B 和 C 相同。
期望的输出:
我可以对逻辑进行硬编码,如下所示,但必须有更好的方法来处理。
conditions = [(df2['A'] > 0) & (df2['A'] <= 100),
(df2['A'] > 100) & (df2['A'] <= 200),
(df2['A'] > 200) & (df2['A'] <= 300)]
choices = [32, 15, 45]
df2['mapped_A'] = np.select(conditions, choices, default='null')
【问题讨论】:
-
B和C列的预期输出错误。