0

我想创建一个函数,给定字典将能够生成应用函数,例如:

df = pd.DataFrame({"A" : [1,2,3,4],
                   "B" : [4,5,6,7]})

这是一个熊猫数据框。

我想创建一个 2 个新列:“D”和“E”。如果 A <=2 D = 0,如果 A = 3 D = 0.5 否则为 1,而 E = 0 如果 B <=5 否则为 1。所以生成的 DataFrame 将是:

df_result = pd.DataFrame({"A" : [1, 2, 3, 4],
                          "B" : [4, 5, 6, 7], 

                          "D" : [0, 0, 0.5, 1],
                          "E" : [0, 0, 1, 1]
})

通常我会使用 2 个不同的功能,例如:

f_a = lambda x : 0 if x <=2 else (0.5 if x == 3 else 1)

f_b = lambda x : 0 if x <=5 else 1

而且我会使用类似的东西:

df["D"] = df["A"].apply(f_a)
df["E"] = df["B"].apply(f_b)

有一种方法可以创建一个函数,该函数将在给定字典的情况下返回像 f_a 这样的 lambda 函数:

{ "0" : 2,
  "0.5" : 3,
  "1" : 4}

谢谢

4

1 回答 1

0

您可以使用布尔运算符或np.where/np.select

df['E'] = df['B'].gt(5).astype(int)
# eqivalently
# df['E'] = np.where(df['B'] <= 5, 0, 1)

df['D'] = np.select( (df['A']<= 2, df['A'] ==3), (0, 0.5), 1)
于 2020-05-14T14:04:03.610 回答