[英]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.