基于列名pandas对列进行操作

时间:2016-03-11 13:33:14

标签: python pandas

我想根据名称在一列上应用一个函数。 例如,我想做类似的事情

df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
df['A']*10
df['B']*5

显然得到df,A列乘以10,B乘以5。 apply方法适用于所有数据帧。如何设法仅在一列上执行此操作?

我确定这是一个愚蠢的问题,但我找不到答案><

2 个答案:

答案 0 :(得分:2)

您可以使用mul方法:

np.random.seed(10)
df = pd.DataFrame(np.random.randn(6,4),columns=list('ABCD'))
df['A'] = df['A'].mul(10)

原始数据框的示例:

In [17]: df.A.mul(10)
Out[17]:
0    13.315865
1     6.213360
2     0.042914
3    -9.650657
4   -11.366022
5   -19.777283
Name: A, dtype: float64

它比平时更快*

In [18]: %timeit df.A.mul(10)
10000 loops, best of 3: 45.9 us per loop

In [19]: %timeit df.A * 10
10000 loops, best of 3: 62.8 us per loop

答案 1 :(得分:1)

我认为您必须将操作重新分配给列,即:

df['A'] = df['A']*10

所以如果df是:

          A         B         C         D
0  0.413751 -0.484915 -0.559226 -0.522385
1 -0.889737 -1.000377 -0.442455  1.028374
2  0.038178  0.904601 -0.155169  0.152253
3  0.806682  1.119178  0.626849  2.069546
4  0.175276 -1.100351  1.556018 -0.231201
5  3.006512  1.046269  0.134351  1.157927
施加

df['A'] = df['A']*10
df['B'] = df['B']*5

返回:

           A         B         C         D
0   4.137510 -2.424573 -0.559226 -0.522385
1  -8.897369 -5.001884 -0.442455  1.028374
2   0.381776  4.523004 -0.155169  0.152253
3   8.066817  5.595892  0.626849  2.069546
4   1.752762 -5.501753  1.556018 -0.231201
5  30.065124  5.231344  0.134351  1.157927