Python 3.x 如何为pandas中的列中的每个列表添加不同的元素?

Python 3.x 如何为pandas中的列中的每个列表添加不同的元素?,python-3.x,pandas,list,if-statement,apply,Python 3.x,Pandas,List,If Statement,Apply,我有一个数据帧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(

我有一个数据帧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

有人能帮我吗


非常感谢您。

问题在于
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))

问题在于
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))

如果要使用append,请尝试以下操作:

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。

如果要使用append,请尝试以下操作:

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。

欢迎使用SO,请提供a以获得更好的响应。欢迎使用SO,请提供a以获得更好的响应。我相信她希望附加最后两个元素,而不是它们的总和:
x+x[-2::
@Andrea我相信这部分问题显然要求附加总和“我想附加另一个元素,它是最后两个元素的总和“我的错误,你完全正确,我没有看到斐波那契来了。谢谢你,它起作用了!我只是不明白为什么需要虚拟变量。我试着只使用第二行代码,因为它可以单独工作。请你解释一下这个想法好吗?@sofiacosta29不需要,只需要在数据帧中添加额外的列,以确保DF的其余部分正常。如果这是可行的,请考虑接受它作为解决方案。我相信她要追加最后两个元素,而不是它们的总和:<代码> x+x[-2:] /代码> @安德列。我相信这个问题显然要求追加“我想追加另一个元素,这是最后两个元素的总和”,我的错误,你是完全正确的,我没看到斐波那契来,谢谢你,它起作用了!我只是不明白为什么需要虚拟变量。我试着只使用第二行代码,因为它可以单独工作。请你解释一下这个想法好吗?@sofiacosta29不需要,只需要在数据帧中添加额外的列,以确保DF的其余部分正常。如果这是可行的,请考虑接受它作为解决方案。列表将通过引用传递给函数,而不是值。因此,此解决方案在函数运行时更改数据帧,然后再次覆盖它,这是不必要的操作。列表将通过引用而不是值传递给函数。因此,此解决方案在函数运行时更改数据帧,然后再次覆盖它,这是不必要的操作。