2017-07-16 5 views
1

として別の列を使用してデータフレームの列の値を変更することができます。どのように私はこのようなデータフレーム(データを)持っているパラメータ

     mac len  corp        detail 
18025   14:1F:BA 8 IeeeRegi   IEEE Registration Authority 
18026 14:1F:BA:00:00:00 10 Shenzhen Shenzhen Mining Technology Co.,Ltd. 
18027 14:1F:BA:10:00:00 10 Gloquad         NaN 
18028 14:1F:BA:20:00:00 10 Deutsche  Deutsche Energieversorgung GmbH 
18029 14:1F:BA:30:00:00 10 Private         NaN 

にはどうすればデータなどの方法を使用して、以下の結果[「MAC」を得ることができます] .str.slice(0、data ['len'])]。

   mac len  corp        detail 
18025 14:1F:BA 8 IeeeRegi   IEEE Registration Authority 
18026 14:1F:BA:0 10 Shenzhen Shenzhen Mining Technology Co.,Ltd. 
18027 14:1F:BA:1 10 Gloquad         NaN 
18028 14:1F:BA:2 10 Deutsche  Deutsche Energieversorgung GmbH 
18029 14:1F:BA:3 10 Private         NaN 

私は適用方法がOKである知っている:

def sub_mac(x): 
    return x.mac[:x.len] 
data.mac = data.apply(sub_mac, axis=1) 

または

data.mac = data.apply(lamda x: x.mac[:x.len], axis=1) 

しかし、私はそれを処理するための別の方法があるかどうかを知りたいですか?たとえば、 のようなメソッドは、sql:

select SUBSTRING(mac, 0, len) as mac_sub from data; 

thxのようなメソッドです。

答えて

0

これを試してみてください:

出典DF:

In [8]: df 
Out[8]: 
        mac len  corp        detail 
18025   14:1F:BA 8 IeeeRegi   IEEE Registration Authority 
18026 14:1F:BA:00:00:00 10 Shenzhen Shenzhen Mining Technology Co.,Ltd. 
18027 14:1F:BA:10:00:00 10 Gloquad         NaN 
18028 14:1F:BA:20:00:00 10 Deutsche  Deutsche Energieversorgung GmbH 
18029 14:1F:BA:30:00:00 10 Private         NaN 

ソリューション:

In [9]: df['mac'] = df.groupby('len')['mac'].transform(lambda x: x.str[:x.name]) 

結果:

In [10]: df 
Out[10]: 
       mac len  corp        detail 
18025 14:1F:BA 8 IeeeRegi   IEEE Registration Authority 
18026 14:1F:BA:0 10 Shenzhen Shenzhen Mining Technology Co.,Ltd. 
18027 14:1F:BA:1 10 Gloquad         NaN 
18028 14:1F:BA:2 10 Deutsche  Deutsche Energieversorgung GmbH 
18029 14:1F:BA:3 10 Private         NaN 
関連する問題