【问题标题】:Creating a vector containing the next 10 row-column values for each pandas row为每个 pandas 行创建一个包含接下来 10 个行列值的向量
【发布时间】:2018-12-22 09:17:15
【问题描述】:

我正在尝试从 pandas 列中创建一个包含前 10 个值的向量,并将其作为单元格中的列表重新插入到 pandas 数据框中。

以下代码有效,但我需要为超过 3000 万行的数据帧执行此操作,因此循环执行此操作需要很长时间。

有人可以帮我将其转换为我可以应用的 numpy 函数吗?我还希望能够在 groupby 中应用此功能。

import pandas as pd

df = pd.DataFrame(list(range(1,20)),columns = ['A'])

df.insert(0,'Vector','')
df['Vector'] = df['Vector'].astype(object)

for index, row in df.iterrows():
     df['Vector'].iloc[index] = list(df['A'].iloc[(index-10):index])

我尝试了多种方式,但都无法让它发挥作用。任何帮助将不胜感激。

【问题讨论】:

  • 能否添加一个小样本数据框,并在操作执行后分享预期输出
  • 前 3 行代码构建 df,for 循环创建输出

标签: python-3.x list pandas numpy apply


【解决方案1】:

IIUC

df['New']=[df.A.tolist()[max(0,x-10):x] for x in range(len(df))]
df
Out[123]: 
     A                                      New
0    1                                       []
1    2                                      [1]
2    3                                   [1, 2]
3    4                                [1, 2, 3]
4    5                             [1, 2, 3, 4]
5    6                          [1, 2, 3, 4, 5]
6    7                       [1, 2, 3, 4, 5, 6]
7    8                    [1, 2, 3, 4, 5, 6, 7]
8    9                 [1, 2, 3, 4, 5, 6, 7, 8]
9   10              [1, 2, 3, 4, 5, 6, 7, 8, 9]
10  11          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
11  12         [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
12  13        [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
13  14       [4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
14  15      [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
15  16     [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
16  17    [7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
17  18   [8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
18  19  [9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

【讨论】:

  • 谢谢你这个作品 - 但是这里的 x 与索引有什么关系?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2010-09-24
  • 2019-12-07
  • 2021-09-06
  • 2017-07-05
  • 2019-04-18
  • 1970-01-01
相关资源
最近更新 更多