亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

熊貓系列/數據欄的條件創建

熊貓系列/數據欄的條件創建

函數式編程 2019-06-10 20:51:24
熊貓系列/數據欄的條件創建我有一份數據,大致如下:    Type       Set1    A          Z2    B          Z           3    B          X4    C          Y我希望向dataframe(或生成一個序列)中添加另一列,其長度與dataframe(=相等的記錄/行數)相同,如果設置為‘Z’,則設置顏色為綠色;如果設置為“否則”,則設置‘red’。做這件事最好的方法是什么?
查看完整描述

3 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

列表理解是另一種有條件地創建另一列的方法。如果您正在使用列中的對象dtype(如您的示例中所示),則列表理解通常優于大多數其他方法。


示例列表理解:


df['color'] = ['red' if x == 'Z' else 'green' for x in df['Set']]

%timeit測試:


import pandas as pd

import numpy as np


df = pd.DataFrame({'Type':list('ABBC'), 'Set':list('ZZXY')})

%timeit df['color'] = ['red' if x == 'Z' else 'green' for x in df['Set']]

%timeit df['color'] = np.where(df['Set']=='Z', 'green', 'red')

%timeit df['color'] = df.Set.map( lambda x: 'red' if x == 'Z' else 'green')


1000 loops, best of 3: 239 μs per loop

1000 loops, best of 3: 523 μs per loop

1000 loops, best of 3: 263 μs per loop


查看完整回答
反對 回復 2019-06-10
?
MYYA

TA貢獻1868條經驗 獲得超4個贊


下面還有另一種方法,使用字典將新值映射到列表中的鍵上,從而剝去這只貓的皮:


def map_values(row, values_dict):

    return values_dict[row]


values_dict = {'A': 1, 'B': 2, 'C': 3, 'D': 4}


df = pd.DataFrame({'INDICATOR': ['A', 'B', 'C', 'D'], 'VALUE': [10, 9, 8, 7]})


df['NEW_VALUE'] = df['INDICATOR'].apply(map_values, args = (values_dict,))

它是什么樣子的:


df

Out[2]: 

  INDICATOR  VALUE  NEW_VALUE

0         A     10          1

1         B      9          2

2         C      8          3

3         D      7          4

當您有許多方法時,這種方法可能非常強大。ifelse-要進行的類型聲明(即許多要替換的唯一值)。


當然,你也可以這樣做:


df['NEW_VALUE'] = df['INDICATOR'].map(values_dict)

但是這種方法的速度是apply從上面靠近,在我的機器上。


您也可以這樣做,使用dict.get:


df['NEW_VALUE'] = [values_dict.get(v, None) for v in df['INDICATOR']]


查看完整回答
反對 回復 2019-06-10
  • 3 回答
  • 0 關注
  • 491 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號