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

Pandas: modify cell values using method chaining

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

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

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

我可以用方法链方式来做吗?我想更可恶! 像这样。

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

我有很多清理数据的方法,这是其中一种操作,我一直卡在这个地方。 我遇到过,replaceset_value 等。但我无法弄清楚如何。

我也尝试了 apply 方法,但它 returns 仅适用于应用该操作的列。所以我只得到 b 带有 apply 方法的列。如何进一步接近?

你可以试试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

您可以使用带有自定义函数的应用程序:

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 中的函数!