DataFrame.apply(func) 返回字典时无效

0 投票
1 回答
692 浏览
提问于 2025-04-27 22:42

我可以把一个返回 dict 的函数传给 DataFrame.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 个回答

3

你可以把一个函数传给apply,但这个函数不应该返回一个字典。如果你想按照你自己的方式添加一个求和的列,可以这样做:

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)

撰写回答