gpt4 book ai didi

python - 根据其他列的 if-else 填充 pandas DataFrame 的新列

转载 作者:行者123 更新时间:2023-11-28 18:00:09 32 4
gpt4 key购买 nike

我有一种情况,我想在 Pandas DataFrame 中创建一个新列,并根据涉及其他 2 个列的条件填充它。在这个例子中:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([['value1','value2'],['value',np.NaN],[np.NaN,np.NaN]]), columns=['col1','col2'])

我想创建一个新列“new col”,它包括 1) 如果它不是 NaN else,则它是“col2”中的值,2) 如果它不是 NaN else,则它是“col1”中的值, 3) 南

我正在用 .apply() 尝试这个函数,但它没有返回所需的结果

def singleval(row):
if row['col2'] != np.NaN:
val = row['col2']
elif row['col1'] != np.NaN:
val = row['col1']
else:
val = np.NaN
return val

df['new col'] = df.apply(singleval,axis=1)

我希望 'new col' 中的值是 ['value2', 'value', 'nan']

最佳答案

方法一fillna

在这种情况下,我们可以简单地在 col2 上使用 fillna 和来自 col1 的值:

df['new col'] = df['col2'].fillna(df['col1'])

     col1    col2 new col
0 value1 value2 value2
1 value NaN value
2 NaN NaN NaN

方法二np.select

如果您有多个条件,请使用 np.select您传递了一个条件列表,并根据这些条件传递给它选择:

conditions = [
df['col2'].notnull(),
df['col1'].notnull(),
]

choices=[df['col2'], df['col1']]

df['new col'] = np.select(conditions, choices, default=np.NaN)

     col1    col2 new col
0 value1 value2 value2
1 value NaN value
2 NaN NaN NaN

注意

您的数据框与 NaN 不正确,请改用这个来测试:

df = pd.DataFrame({'col1':['value1', 'value', np.NaN],
'col2':['value2', np.NaN, np.NaN]})

编辑:为什么函数不起作用?

np.NaN == np.NaN 将返回 False
np.NaN 是 np.NaN 将返回 True

参见 this question对此的解释。

所以要修复你的功能,你必须使用 is not:

def singleval(row):
if row['col2'] is not np.NaN:
val = row['col2']
elif row['col1'] is not np.NaN:
val = row['col1']
else:
val = np.NaN
return val

df['new col'] = df.apply(singleval, axis=1)

     col1    col2 new col
0 value1 value2 value2
1 value NaN value
2 NaN NaN NaN

关于python - 根据其他列的 if-else 填充 pandas DataFrame 的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56120928/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com