在 pandas dataframe 中将多列中的值合并为一列-ag捕鱼王app官网

在 pandas dataframe 中将多列中的值合并为一列

作者:迹忆客 最近更新:2024/04/21 浏览次数:

本教程将演示将多列中的第一个非空值合并或返回到 python pandas dataframe 中的另一列。

例如,如果它不为空,则将第 1 列的值用于新的第 3 列;否则,如果第 1 列为空,则将第 2 列的值用于新的第 3 列。

我们可以在 pandas dataframe 中以多种方式完成此任务。


从头开始编写代码以将多列中的值合并到 pandas dataframe 中的一列中

我们可以从头开始编写逻辑来合并值。我们在以下代码中创建了一个 pandas dataframe,其中包含三列,名为 age_in_yearsage_in_monthsage_in_days

dataframe 也有一些缺失值。如果我们要显示年龄,首先,我们将输出年龄,以年为单位。

如果该列中的值为 null,我们将以月为单位显示年龄。同样,如果以月为单位的值为 null,我们将以天为单位显示年龄。

为此,我们从头开始编写代码来获取第一个非空列的值。该函数正在遍历所有 dataframe 列,并在找到非空值的地方返回该值;否则,它会检查其他列中的值。

示例代码:

# python 3.x
import pandas as pd
df_age = pd.dataframe(
    {
        "age_in_years": ["4 y", none, none, none],
        "age_in_months": ["48 m", "24 m", none, none],
        "age_in_days": ["1440 d", none, "2520 d", none],
    }
)
def get_first_non_null(dfrow, cols):
    for c in cols:
        if pd.notnull(dfrow[c]):
            return dfrow[c]
    return none
cols = ["age_in_years", "age_in_months", "age_in_days"]
df_age["age"] = df_age.apply(lambda x: get_first_non_null(x, cols), axis=1)
display(df_age)

输出:


在 pandas dataframe 中使用 duckdb 运行 sql 查询以将多列中的值合并为一列

示例代码:

duckdb 是一个 python api 和一个使用 sql 查询与数据库交互的数据库管理系统。这个包有一个内置的合并方法,可以从列中选择第一个非空值。

我们将在 sql 查询中将列名传递给 coalesce 方法。

# python 3.x
import pandas as pd
import duckdb
df_age = pd.dataframe(
    {
        "age_in_years": ["4 y", none, none, none],
        "age_in_months": ["48 m", "24 m", none, none],
        "age_in_days": ["1440 d", none, "2520 d", none],
    }
)
df_age = duckdb.query(
    """select age_in_years, age_in_months, age_in_days, coalesce(age_in_years, age_in_months, age_in_days) as age from df_age"""
).to_df()
display(df_age)

输出:


在 pandas dataframe 中使用 combine_first() 方法将多列中的值合并为一列

combine_first() 方法用来自第二个 dataframe 的非空数据填充一个 dataframe 中的空值,以组合两个 dataframe 对象。

在下面的代码中,我们将返回列值。我们将把 age_in_yearsage_in_months 结合起来,将 age_in_monthsage_in_days 结合起来。

它将返回来自 age_in_years 的值。如果为 null,它将返回来自 age_in_months 的值。同样,如果这也是 null,它将从 age_in_days 返回一个值。

实际 dataframe 中的数据不会改变,我们将在 age 列中获得我们想要的值。

示例代码:

# python 3.x
import pandas as pd
df_age = pd.dataframe(
    {
        "age_in_years": ["4 y", none, none, none],
        "age_in_months": ["48 m", "24 m", none, none],
        "age_in_days": ["1440 d", none, "2520 d", none],
    }
)
df_age["age"] = (
    df_age["age_in_years"]
    .combine_first(df_age["age_in_months"])
    .combine_first(df_age["age_in_days"])
)
df_age

输出:


在 pandas dataframe 中使用 bfill() 方法将多列中的值合并为一列

bfill 代表反向填充。此方法将 nan 替换为下一行或下一列值。

在这里,如果当前列中的值为 null,我们将指定 axis=1 从下一列返回值。

示例代码:

# python 3.x
import pandas as pd
df_age = pd.dataframe(
    {
        "age_in_years": ["4 y", none, none, none],
        "age_in_months": ["48 m", "24 m", none, none],
        "age_in_days": ["1440 d", none, "2520 d", none],
    }
)
df_age["age"] = df_age.bfill(axis=1).iloc[:, 0]
df_age

输出:


在 pandas dataframe 中使用 mask() 方法将多列中的值合并为一列

mask() 方法的工作方式与 if-then 类似。

如果某个列的 null 条件为 false,则将使用其值。否则,它将从其他指定列中获取值。

示例代码:

# python 3.x
import pandas as pd
df_age = pd.dataframe(
    {
        "age_in_years": ["4 y", none, none, none],
        "age_in_months": ["48 m", "24 m", none, none],
        "age_in_days": ["1440 d", none, "2520 d", none],
    }
)
df_age["age"] = (
    df_age["age_in_years"]
    .mask(pd.isnull, df_age["age_in_months"])
    .mask(pd.isnull, df_age["age_in_days"])
)
df_age

输出:

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:python

pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 dataframe 中。

pandas 追加数据到 csv 中

发布时间:2024/04/24 浏览次数:352 分类:python

本教程演示了如何在追加模式下使用 to_csv()向现有的 csv 文件添加数据。

pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:python

本教程介绍了如何在 pandas 中使用 dataframe.merge()方法合并两个 dataframes。

pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:python

本教程介绍了如何使用 python 中的 loc 和 iloc 从 pandas dataframe 中过滤数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便
网站地图