python - 在给定条件下为新的 Pandas 列分配值

标签 python pandas dataframe

我是 Pandas 新手

我想在 Pandas 中创建一个条件列。在 R 中,我可以使用 Mutate 来做到这一点,但在 Pandas.assign() 中,这对我来说不太有意义。

我想用伪代码做的是:

DataFrame.MyKeyColumn = If (DataFrame.Condtional is NaN) then:

concatenate[ DataFrame.keyfield1,"_",DataFrame.keyfield2,"_",DataFrame.keyfield3,"_",keyfield4] 
else:
concatenate[ DataFrame.keyfield1,"_",DataFrame.keyfield2,"_",DataFrame.condtionalfield,"_",DataFrame.keyfield3,"_",keyfield4]

在 R 中你可以这样做:

dplyr::mutate(Conditional = if(is.na(mycondtion)){paste(keyfield1,keyfield2)}, else {paste(keyfield1,condtionalfield,keyfield2)})

Example of my Current Data

Ideal End Goal

任何帮助都会非常感激。我希望我只是错过了理解 pandas.assign() 的工作原理,或者我需要嵌套一些像 pandas.where() 这样的函数。

最佳答案

您可以使用 numpy 的 where 设置条件 bool 逻辑来填充其他列,这是一个基于您的伪代码的示例:

df.MyKeyColumn = np.where(df.Condtional.isna(),
df.keyfield1+"_"+df.keyfield2+"_"+df.keyfield3+"_"+keyfield4,
df.keyfield1+"_"+df.keyfield2+"_"+df.condtionalfield+"_"+df.keyfield3+"_"+keyfield4)

这是一个简化的用法示例:

import pandas as pd
import numpy as np

# Create a dummy dataframe
df = pd.DataFrame(data={"col1":[np.nan, 1, np.nan], "col2":[4, 5, 6]})

# Create a new column which fills in missing col1 values with data from col2
df["new_col"] = np.where(df["col1"].isna(), df["col2"], df["col1"])

# Create a new column which fills in missing col1 values with scalar value
df["new_col2"] = np.where(df["col1"].isna(), 7, df["col1"])

关于python - 在给定条件下为新的 Pandas 列分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53416412/

相关文章:

python - 找不到部署 Heroku 的 WSGI 模块

python - 在 Python 中从现有 2D 数组创建 3D 数组

Python Pandas 错误栏未绘制以及如何自定义索引

r - 根据逻辑列的顺序在 DF 中创建多个新列

python - 删除 Pandas 数据框中的未命名列

python - 比较 Pandas Dataframes 的 boolean 值——返回字符串

python - 我的代码中不断出现错误,无法弄清楚

python - 具有多个输出列的 Pandas 聚合函数

python - 如何将 pandas 系列转换为 seaborn 条形图

python - Pandas 按类别绘制数据框条形图和颜色