返回是dict时,DataFrame.apply(func)不起作用

时间:2014-10-16 12:36:09

标签: python pandas

我可以传递一个返回dictDataFrame.apply的函数吗?

我正在尝试在df中创建一个包含dict个对象或Series的新列。但是,当我尝试它时,我会得到意想不到的结果:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'a':[1,2,3,4], 'b':[9,8,7,6]})

In [3]: def df_addition(row):
   ...:         sum = row['a'] + row['b']
   ...:         return {'sum': sum}
   ...:

In [4]: df.apply(df_addition, axis=1)
Out[4]:
    a   b
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN

In [5]: df_addition(df.irow(0))
Out[5]: {'sum': 10}

In [6]: df.apply(lambda row: pd.Series(df_addition(row)), axis=1)
Out[6]:
   sum
0   10
1   10
2   10
3   10

1 个答案:

答案 0 :(得分:3)

您可以传递一个函数来应用,但它不应该返回一个字典。如果您想以自己的方式添加总和列 - 请执行以下操作:

df = pd.DataFrame({'a':[1,2,3,4], 'b':[9,8,7,6]})

df['sum'] = df.apply(lambda x: x['a'] + x['b'], axis = 1)

df
Out[6]: 
   a  b  sum
0  1  9   10
1  2  8   10
2  3  7   10
3  4  6   10

更简单的方法就是:

df['sum'] = df.a + df.b

df['sum'] = df.sum(1)