以下代码是使用 python 2.7 和 pandas 0.9.1 生成的。
我有一个包含“次要”和“主要”两列的数据框。我通过取两者的最大绝对值来计算“临界”值,并建立一个名为“critic”的新列:
>>> import pandas as pd
>>> df = pd.DataFrame(
...: {'minor':[-6, -2.3, 19.2], 'major':[2, 3, 7.4]},
...: index=[10,20,30])
>>> print df
major minor
10 2.0 -6.0
20 3.0 -2.3
30 7.4 19.2
>>> df['critic'] = df[['minor', 'major']].abs().max(axis=1)
>>> print df
major minor critic
10 2.0 -6.0 6.0
20 3.0 -2.3 3.0
30 7.4 19.2 19.2
我的问题是建立一个新列,比如说“critic_vector”,显示给出这个值的列名。直到现在,我都是这样使用 DataFrame.apply() 的:
>>> def get_col_name(row, df, headers):
tmp = (abs(df[headers].ix[row.name]) == row['critic'])
retval = tmp.index[tmp.argmax()]
return retval
>>> df['critic_vector'] = df.apply(get_col_name,
axis=1,
args=(df ,['minor', 'major']))
>>>print df
major minor critic critic_vector
10 2.0 -6.0 6.0 minor
20 3.0 -2.3 3.0 major
30 7.4 19.2 19.2 minor
它工作正常;然而,处理大量数据时,df.apply() 函数是我的第一个瓶颈。有没有办法直接做到这一点,而不使用 df.apply() ?
提前致谢