如何基于 Pandas 中的给定条件创建 DataFrame 列
我们可以使用 DataFrame 对象的列表推导,NumPy 方法,apply()
方法和 map()
方法根据 Pandas 中的给定条件创建 DataFrame
列。
列表推导以根据 Pandas 中的给定条件创建新的 DataFrame
列
我们可以根据 Pandas 中的给定条件,利用各种列表推导来创建新的 DataFrame
列。列表推导是一种从可迭代对象创建新列表的方法。它比其他方法更快,更简单。
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
df["Status"] = ["Senior" if s >= 400 else "Junior" for s in df["Salary"]]
print(df)
输出:
Name Joined date Salary Status
0 Hisila 2019-11-20 200 Junior
1 Shristi 2020-01-02 400 Senior
2 Zeppy 2020-02-05 300 Junior
3 Alina 2020-03-10 500 Senior
4 Jerry 2020-04-16 600 Senior
5 Kevin 2020-05-01 300 Junior
如果 Salary
大于或等于 400,它将在 df
中创建一个新列 Status
,其值将为 Senior
,否则为 Junior
。
NumPy 方法根据 Pandas 中的给定条件创建新的 DataFrame 列
我们还可以使用 NumPy 方法根据 Pandas 中的给定条件创建一个 DataFrame
列。为此,我们可以使用 np.where()
方法和 np.select()
方法。
np.where()
方法
np.where()
将条件作为输入并返回满足给定条件的元素的索引。当我们只有一个条件时,可以使用此方法根据 Pandas 中的给定条件创建 DataFrame 列。
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
df["Status"] = np.where(df["Salary"] >= 400, "Senior", "Junior")
print(df)
输出:
Name Joined date Salary Status
0 Hisila 2019-11-20 200 Junior
1 Shristi 2020-01-02 400 Senior
2 Zeppy 2020-02-05 300 Junior
3 Alina 2020-03-10 500 Senior
4 Jerry 2020-04-16 600 Senior
5 Kevin 2020-05-01 300 Junior
如果满足条件,则 np.where(condition, x, y)
返回 x,否则返回 y。
如果满足给定条件,上面的代码将在 df
中创建一个新列 Status
,其值为 Senior
。否则,将该值设置为初级。
np.select()
方法
np.where()将条件列表和选择列表作为输入,并根据条件返回从选择列表中的元素构建的数组。当我们有两个或多个条件时,可以使用此方法根据 Pandas 中的给定条件创建 DataFrame 列。
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
conditionlist = [
(df["Salary"] >= 500),
(df["Salary"] >= 300) & (df["Salary"] < 300),
(df["Salary"] <= 300),
]
choicelist = ["High", "Mid", "Low"]
df["Salary_Range"] = np.select(conditionlist, choicelist, default="Not Specified")
print(df)
输出:
Name Joined date Salary Salary_Range
0 Hisila 2019-11-20 200 Low
1 Shristi 2020-01-02 400 black
2 Zeppy 2020-02-05 300 Low
3 Alina 2020-03-10 500 High
4 Jerry 2020-04-16 600 High
5 Kevin 2020-05-01 300 Low
这里,如果满足条件列表中的第一个条件的行,则该特定行的列 Salary_Range
的值将被设置为选择列表中的第一个元素。条件列表中的其他条件类似。如果不满足条件列表中的任何条件,则将该行的 Salary_Range
列的值设置为 np.where()
方法中的默认参数的值,例如,Not Specified
。
pandas.DataFrame.apply
根据 Pandas 中的给定条件创建新的 DataFrame 列
pandas.DataFrame.apply 返回一个 DataFrame
沿 DataFrame 的给定轴应用给定函数的结果。
语法:
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)
func
代表要应用的函数。
axis
代表应用该函数的轴。我们可以使用 axis=1
或 axis = 'columns'
将函数应用于每一行。
我们可以使用此方法检查条件并为新列的每一行设置值。
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
def set_values(row, value):
return value[row]
map_dictionary = {200: "Low", 300: "LOW", 400: "MID", 500: "HIGH", 600: "HIGH"}
df["Salary_Range"] = df["Salary"].apply(set_values, args=(map_dictionary,))
print(df)
输出:
Name Joined date Salary Salary_Range
0 Hisila 2019-11-20 200 Low
1 Shristi 2020-01-02 400 MID
2 Zeppy 2020-02-05 300 LOW
3 Alina 2020-03-10 500 HIGH
4 Jerry 2020-04-16 600 HIGH
5 Kevin 2020-05-01 300 LOW
在这里,我们定义了一个函数 set_values()
,该函数使用 df.apply()
应用于每一行。该函数根据该行的 Salary
列的值来设置 Salary_Range
列的每一行的值。我们建立了一个 map_dictionary
来根据 Salary
列中的数据来决定 Salary_Range
列的数值。当新列有很多选项时,此方法为我们提供了更大的灵活性。
pandas.Series.map()
根据 Pandas 中的给定条件创建新的 DataFrame 列
我们也可以使用 pandas.Series.map() 创建新的 DataFrame
列基于 Pandas 中的给定条件。该方法适用于系列的元素方式,并根据可能是字典,函数或系列的输入将值从一列映射到另一列。
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
map_dictionary = {200: "Low", 300: "LOW", 400: "MID", 500: "HIGH", 600: "HIGH"}
df["Salary_Range"] = df["Salary"].map(map_dictionary)
print(df)
输出:
Name Joined date Salary Salary_Range
0 Hisila 2019-11-20 200 Low
1 Shristi 2020-01-02 400 MID
2 Zeppy 2020-02-05 300 LOW
3 Alina 2020-03-10 500 HIGH
4 Jerry 2020-04-16 600 HIGH
5 Kevin 2020-05-01 300 LOW
它创建一个新列 Salary_Range
,并根据 map_dictionary
中的键值对设置该列每一行的值。
相关文章
在 Pandas 的 DataFrame 中合并两列文本
发布时间:2024/04/22 浏览次数:99 分类:Python
-
在 Pandas 库中使用 + 运算符,apply(),map(),str.cat(),agg()方法在 DataFrame 中合并列
Pandas DataFrame DataFrame.append() 函数
发布时间:2024/04/22 浏览次数:92 分类:Python
-
Pandas 中的 append 方法将两个不同 DataFrame 的行合并,并返回新的 DataFrame。
Pandas DataFrame DataFrame.apply() 函数
发布时间:2024/04/22 浏览次数:172 分类:Python
-
Pandas DataFrame apply()函数将输入的函数应用到 Pandas DataFrame 的每一个沿行或沿列的元素。
Pandas DataFrame DataFrame.aggregate() 函数
发布时间:2024/04/22 浏览次数:98 分类:Python
-
Pandas DataFrame aggregate()函数对 DataFrame 的列或行进行聚合。
Pandas DataFrame DataFrame.to_excel() 函数
发布时间:2024/04/22 浏览次数:68 分类:Python
-
DataFrame.to_excel()函数将 DataFrame 数据转储到 excel 文件中,单张或多张。
Pandas DataFrame DataFrame.sort_values() 函数
发布时间:2024/04/22 浏览次数:70 分类:Python
-
DataFrame sort_values()函数对给定的 DataFrame 按升序或降序进行排序。
Pandas DataFrame DataFrame.set_index() 函数
发布时间:2024/04/22 浏览次数:69 分类:Python
-
Pandas DataFrame 的 set_index 方法用于将列或数组设置为 DataFrame 的索引。