DataFrame.apply(func) 返回字典时无效
我可以把一个返回 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)