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

2024-10-06 12:27:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Dataframe,它有一个movie name列和3个其他列(我们称它们为a、B和C),它们是来自3个不同来源的收视率。 有许多电影只有一个评级,一些电影与来自3个论坛的组合,还有一些没有评级。我想创建一个新列,它将:

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

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

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 dataframe

我不确定这个值错误对解决这个问题意味着什么,也不确定这是否是正确的方法。你知道吗


Tags: namedataframedfreturnif电影check错误
2条回答

我会这样做:

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]:。这就是模棱两可的根源。你如何评价这种情况?如果所有这些都是真的,你会执行吗?或者仅仅一个就足够了?你知道吗

作为M. Klugerford explained,您可以更改它,以便逐行计算它(因此返回单个值)。但是,逐行应用操作通常很慢,而且pandas有很好的工具来处理丢失的数据。所以我才提出这个建议。你知道吗

您正在原始函数中返回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

相关问题 更多 >