簡體   English   中英

根據其他列中的值創建新列

[英]Create new column based on values in other columns

我正在使用FIFA 19數據集,該數據集的“工作率”列存儲了球員的進攻和防守工作率,例如(“中/中”)。 我想創建另外兩個列(緊鄰原始列),它們可以分別存儲這些功能。 我們稱它們為“工作率攻擊”,“工作率捍衛”。 我想不出最好的方法,我一直在考慮應用簡單的拆分函數,但它返回ValueError。

def split_work_rate(text, work_type):
    while not pd.isnull(text):
        new_text = text.split('/')
        if work_type == 'Attacking':
            work_rate_attacking = new_text[0]
            return work_rate_attacking
        else:
            work_rate_defending = new_text[1]
            return work_rate_defending


def create_new_work_rates(data):
    cols = ['Work Rate']
    data['Work Rate Attacking'] = data[cols].apply(split_work_rate, args=('Attacking',))
    data['Work Rate Defending'] = data[cols].apply(split_work_rate, args=('Defending',))
    return data

ValueError:('系列的真值不明確。請使用a.empty,a.bool(),a.item(),a.any()或a.all()。','以索引工作率發生')

首先,問題是這一行:

if work_type == 'Attacking':

當您寫這pandas時,您可能想的是, pandas會將每行的值與'Attacking'進行比較,然后轉到相應的分支。

但是,實際上, pandas將這種比較應用於整個 Series 因此,與'Attacking'進行比較的結果不是單個布爾值,而是另一個Series 沒有將Series布爾值轉換為單個布爾值的明確方法,因此if測試不起作用。

無論如何,這可能不是最佳方法。 嘗試這個:

data[['Work Rate Attacking', 'Work Rate Defending']] = data['Work Rate'].str.split('/', expand=True)

這使用str訪問器將Series拆分為DataFrame ,然后可以將其分配給所需的兩列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM