簡體   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