首页 > 解决方案 > 根据 Python 中的其他列分配新列

问题描述

在 Python中,我试图在 a 中创建一个degree新列dataframe(每行它应该根据列中存在的值将这些列中任一列的值分配给新列。dataframenullnull

我已经尝试了下面的代码,它给了我以下错误消息:

KeyError: 'degree'

代码是 -

for i in basicdataframe.index:
    if pd.isnull(basicdataframe['section_degree'][i]) and pd.isnull(basicdataframe['model_degree'][i]):
        basicdataframe['degree'][i] = basicdataframe['model_degree'][i]
    elif pd.notnull(basicdataframe['section_degree'][i]) and pd.isnull(basicdataframe['model_degree'][i]):
        basicdataframe['degree'][i] = basicdataframe['section_degree'][i]
    elif pd.isnull(basicdataframe['section_degree'][i]) and pd.notnull(basicdataframe['model_degree'][i]):
        basicdataframe['degree'][i] = basicdataframe['model_degree'][i]
    elif pd.notnull(basicdataframe['section_degree'][i]) and pd.notnull(basicdataframe['model_degree'][i]):
        basicdataframe['degree'][i] = basicdataframe['model_degree'][i]

有谁知道如何实现这一目标?

标签: pythonpandasdataframe

解决方案


假设您有这样的熊猫数据框:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={
    "section_degree": [1, 2, np.nan, np.nan], 
    "model_degree": [np.nan, np.nan, np.nan, 3]
})

您可以定义将应用于 DataFrame 的函数:

def define_degree(x):
    if pd.isnull(x["section_degree"]) and pd.isnull(x["model_degree"]):
        return x["model_degree"]
    elif pd.notnull(x['section_degree']) and pd.isnull(x['model_degree']):
        return x["section_degree"]
    elif pd.isnull(x['section_degree']) and pd.notnull(x['model_degree']):
        return x["model_degree"]
    elif pd.notnull(x['section_degree']) and pd.notnull(x['model_degree']):
        return x["model_degree"]
df["degree"] = df.apply(define_degree, axis=1)

df

# output

    section_degree  model_degree    degree
0   1.0             NaN             1.0
1   2.0             NaN             2.0
2   NaN             NaN             NaN
3   NaN             3.0             3.0

推荐阅读