如何从Pandas列生成列表?为DataFrame添加含最近3个元素的col2列
生成包含最后3个元素的新列col2
可以通过Pandas的rolling窗口函数实现需求,具体代码如下:
import numpy as np import pandas as pd ds = {'col1': [1,2,3,3,3,6,7,8,9,10]} df = pd.DataFrame(data=ds) # 生成col2,每行存储到当前位置为止的最后3个col1元素 df['col2'] = df['col1'].rolling(window=3, min_periods=1).apply(lambda x: x.astype(int).tolist(), raw=False)
代码说明
rolling(window=3):定义窗口大小为3,即每次取当前行及之前最多2行的元素。min_periods=1:允许窗口内元素不足3个时(前两行)仍生成结果,避免返回空值。apply(lambda x: x.astype(int).tolist()):将窗口内的Series对象转换为整数列表,保证结果和原col1的数值类型一致。
最终输出
执行代码后,DataFrame的结果如下:
col1 col2 0 1 [1] 1 2 [1, 2] 2 3 [1, 2, 3] 3 3 [2, 3, 3] 4 3 [3, 3, 3] 5 6 [3, 3, 6] 6 7 [3, 6, 7] 7 8 [6, 7, 8] 8 9 [7, 8, 9] 9 10 [8, 9, 10]
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

