Pandas 逐行映射器

Pandas row-wise mapper

Pandas 是否包含一个简单的方法来一次将映射器应用于每一行?

例如:

import pandas as pd
df = pd.DataFrame(
    [[j + (3*i) for j in range(3)] for i in range(4)],
    columns=['a','b','c']
)
print(df)


   a   b   c
0  0   1   2
1  3   4   5
2  6   7   8
3  9  10  11

然后应用一些映射器(伪代码)

df_ret = df.rowmap(lambda d: d['a'] + d['c'])
print(df_ret)

   0
0  2
1  8
2  14
3  20

请注意,添加数字并不是这里的重点。关键是要有一个按行映射器。

您可以使用 apply 和参数 axis=1:

df_ret = df.apply(lambda d: d['a'] + d['c'], axis=1)
print(df_ret)
0     2
1     8
2    14
3    20
dtype: int64

但使用矢量化解决方案更快:

print (df.a + df.c)
0     2
1     8
2    14
3    20

print (df.a.add(df.c))
0     2
1     8
2    14
3    20
dtype: int64

print (df[['a','c']].sum(axis=1))
0     2
1     8
2    14
3    20
dtype: int64

dtype: int64

最快的解决方案:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.add.html 因为它是内部优化的