2016-10-27 9 views
2
>>> df 
    a b c ... 
0 1 2 
1 3 4 
. ... 

bの列を2倍にします。 私はメソッドチェーンのスタイルでこれを行うことができ、この方法パンダ:メソッドチェインを使用してセル値を変更する

>>> df['b'] *= 2 

知っていますか?もっと思いがけない私は思います! このようなものです。

>>> (df.drop('c', 1) 
     .someMethodToReplaceBColumnValues()) 

私はデータを消去する方法がたくさんあります。これは操作の1つで、これに固執しています。 私は、replaceset_valueなどに出くわしました。しかし、私はどのように考え出すことができません。

私もapplyメソッドを試しましたが、操作が適用された列のみを返します。ですから、私はbカラムだけをapplyメソッドで取得しています。どのようにさらにアプローチするのですか?

答えて

2

あなたはassignを試すことができます:

あなたはカスタム関数で、適用使用することができます
df = pd.DataFrame({'a':[1,2,3], 
        'b':[4,5,6], 
        'c':[7,8,9]}) 

print (df) 
    a b c 
0 1 4 7 
1 2 5 8 
2 3 6 9 

print (df.drop('c', 1).assign(b=df.b*2)) 
    a b 
0 1 8 
1 2 10 
2 3 12 

print (df.drop('c', 1).apply(lambda x: x * 2 if x.name == 'b' else x)) 
    a b 
0 1 8 
1 2 10 
2 3 12 
+0

カラム名にスペースがある場合はどうなりますか? – mythicalcoder

+0

残念ながら、 'assign'は列名にスペースを入れてはいけません。だから私は 'lambda'と' apply'を使って別の解決策を追加します。 – jezrael

+0

素晴らしい、これが私が探していたものです。私は 'apply'が正しい選択だと知っていましたが、それを正しく使う方法を知らなかったのです。ありがとう。 – mythicalcoder

1

def mult(x, columns): 
    if x.name in columns: 
     return x*2 
    else: 
     return x 

print df.apply(mult, args=(['b', 'c'],)) 

    a b c 
0 0 0 0 
1 1 2 2 
2 2 4 4 

あなたは余分としてタプルを渡す考慮してください。適用の関数への引数!

+0

これは良い解決策です。読みやすいコードを提供します。代わりにラムダでこれを行うことはできますか? – mythicalcoder

+0

Nielsありがとう、私は@ jezraelから答えを得た。 – mythicalcoder

関連する問題