在给定另一列Pandas中的值的情况下返回列的值?

问题描述 投票:0回答:5

我有一个包含三列的包含文本的数据框。一栏(column1)包含3个唯一的条目; “ H”,“ D”,“ A”。

我想根据包含“ H”,“ D”或“ A”的列中的条目创建一个新列,并使用其他两列(column2和column3)中的条目。

我尝试编写一个函数:


def func(x):
   if x== "H":
        return column2
   elif x == "A":
        return column3
   else:
        return "D"

然后我尝试使用.apply()功能:

df["new_col"] = df["column1"].apply(func)

但是,由于无法识别column2和column 3,因此无法正常工作。如何访问函数内column2和column 3列的条目?

python python-3.x pandas
5个回答
2
投票

您可以将整行发送到函数并访问其列:

def func(x):
   if x["column1"]== "H":
        return x["column2"]
   elif x["column1"] == "A":
        return x["column3"]
   else:
        return "D"

df["new_col"] = df.apply(lambda x: func(x), axis=1)

1
投票

无需使用.apply,您可以使用np.select根据条件选择元素:

考虑示例数据框:

np.select

用途:

df = pd.DataFrame({
    'column1': ['H', 'D', 'A', 'H', 'A'],
    'column2': [1, 2, 3, 4, 5],
    'column3': [10, 20, 30, 40, 50]
})

结果:

import numpy as np

conditions = [
    df['column1'].eq('H'), 
    df['column1'].eq('A')
]

choices = [
    df['column2'], 
    df['column3']]

df['new_col'] = np.select(
    conditions, choices, default='D')

0
投票

这里,我正在使用所需条件检索行,并更改# print(df) column1 column2 column3 new_col 0 H 1 10 1 1 D 2 20 D 2 A 3 30 30 3 H 4 40 4 4 A 5 50 50 中的相应行。我们可以在column4中使用iloc来实现。

pandas dataframe

上面处理的输出在下面给出,

import pandas as pd

d = {"column1":["H","D","A","D", "H", "H", "A"],"column2":[1,2,3,4,5,6,7],"column3":[12,23,34,45,56,67,87]}
df = pd.DataFrame(d)
df["column4"] = None

df.iloc[list(df[df["column1"] == "H"].index), 3] = df[df["column1"] == "H"]["column2"]
df.iloc[list(df[df["column1"] == "A"].index), 3] = df[df["column1"] == "A"]["column3"]
df.iloc[list(df[df["column4"].isnull()].index), 3] = "D"

0
投票

您可以使用np.select()函数


0
投票

基于对查询的理解,我将举例说明。

热门问题
推荐问题
最新问题