繁体   English   中英

如何基于其他三列之一创建新列?

[英]How to create a new column based on one of three other columns?

我有一个数据帧,其中包含电影名称列和其他3个列(分别称为A,B和C),它们分别来自3个不同来源。 许多电影只有一个等级,有些电影是来自3个论坛的组合,有些则没有评级。 我想创建一个新列,该列将:

  1. 如果A列具有关联的评分,请使用A。
  2. 如果A栏为空,请从B获得相关的评级。
  3. 如果B列为空,请从C获取相关的评分。
  4. 如果C列为空,则返回“未分级”

到目前为止,这就是我的代码:

def check_rating(rating):
    if newyear['Yahoo Rating'] != "\\N":
        return rating
    else:
        if newyear['Movie Mom Rating'] != "\\N":
            return rating
        else:
            if newyear['Critc Rating'] != "\\N":
                return rating
            else:
                return "Unrated"

df['Rating'] = df.apply(check_rating, axis=1)

我得到的错误是:

ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index 0')

为了显示我的数据newyear.head() ,这里是newyear.head()

新年数据框

我不确定此值错误对解决此问题意味着什么,也不确定这样做是否正确。

我会做这样的事情:

df = df.replace('\\N', np.nan)  # this requires import numpy as np
(df['Yahoo Rating'].fillna(df['Movie Mom Rating']
                   .fillna(df['Critic Rating']
                   .fillna("Unrated"))))

您的代码不起作用的原因是newyear['Yahoo Rating'] != "\\\\N"是一个布尔数组。 您在这里说的话类似if [True, False, True, False]: 这就是模棱两可的根源。 您如何评估这种情况? 如果它们全部为True,您将执行该命令还是仅其中之一就足够了?

正如M. Klugerford解释的那样 ,您可以对其进行更改,以便逐行对其进行求值(因此将返回单个值)。 但是,逐行应用操作通常速度较慢,并且熊猫具有出色的工具来处理丢失的数据。 这就是为什么我建议这样做。

您将在原始函数中返回rating ..但rating ,而不是任何列的值

>>> df
    A   B   C Genre Title Year
0   7   6  \N    g1    m1   y1
1  \N   5   7    g2    m2   y2
2  \N  \N  \N    g3    m3   y3
3  \N   4   1    g4    m4   y4
4  \N  \N   3    g5    m5   y5

>>> def rating(row):
    if row['A'] != r'\N':
        return row['A']
    if row['B'] != r'\N':
        return row['B']
    if row['C'] != r'\N':
        return row['C']
    return 'Unrated'

>>> df['Rating'] = df.apply(rating, axis = 1)
>>> df
    A   B   C Genre Title Year   Rating
0   7   6  \N    g1    m1   y1        7
1  \N   5   7    g2    m2   y2        5
2  \N  \N  \N    g3    m3   y3  Unrated
3  \N   4   1    g4    m4   y4        4
4  \N  \N   3    g5    m5   y5        3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM