我有一个数据框df,在特定列col_a中有列表。例如,
df = pd.DataFrame()
df['col_a'] = [[1,2,3], [3,4], [5,6,7]]
我想在这些列表上使用条件并应用特定的修改,包括附录。例如,假设列表的长度> 2,则我想追加另一个元素,它是当前列表的最后两个元素的和。因此,考虑到上面的第一个列表,我有[1、2、3],我想有[1、2、3、5]。
我想做的是:
df.loc[:, col_a] = df[col_a].apply(
lambda value: value.append(value[-2]+value[-1])
if len(value) > 1 else value)
但是对于该列的所有元素,该列的结果均为None
。
有人可以帮我吗?
非常感谢您。
答案 0 :(得分:2)
问题在于append
是一个就位函数,并返回None
。您需要将两个列表一起添加。因此,带有虚拟变量的工作示例为:
df = pd.DataFrame({'cola':[[1,2],[2,3,4]], 'dum':[1,2]})
df['cola']=df.cola.apply(lambda x: (x+[sum(x[-2:])] if len(x)>2 else x))
答案 1 :(得分:1)
如果要使用附加,请尝试以下操作:
def my_logic_for_list(values):
if len(values) > 2:
return values + [values[-2]+values[-1]]
return values
df['new_a'] = df['a'].apply(my_logic_for_list)
您不能在lambda函数中使用append。