Pandas:使用方法链修改单元格值

时间:2016-10-27 15:09:29

标签: python pandas apply assign chaining

>>> df
  a b c ...
0 1 2
1 3 4
. ... 

我希望b列加倍。 我知道这个方法

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

我可以用方法链接方式执行此操作吗?我想更加难看! 这样的事情。

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

我有很多方法来清理数据,这是其中一个操作,我对此感到困惑。 我遇到了replaceset_value等等。但我无法弄明白。

我也尝试了apply方法,但它只返回应用了该操作的列。所以我只使用apply方法获得b列。如何进一步接近?

2 个答案:

答案 0 :(得分:3)

您可以尝试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

答案 1 :(得分:1)

您可以使用apply,使用自定义函数:

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

请考虑将一个元组作为额外参数传递给apply中的函数!