如何为熊猫列中的每个列表添加不同的元素?

时间:2020-02-05 14:31:29

标签: 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(
                    lambda value: value.append(value[-2]+value[-1]) 
                          if len(value) > 1 else value)

但是对于该列的所有元素,该列的结果均为None

有人可以帮我吗?

非常感谢您。

2 个答案:

答案 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。