对numpy数组执行计算并将其添加到熊猫数据框

时间:2019-04-01 11:59:19

标签: python arrays numpy

假设我有一个这样的数组:

a = np.array([[1, 2, 3, 4, 5, 6, 7], [20, 25, 30, 35, 40, 45, 50], [2, 4, 6, 8, 10, 12, 14]])

和诸如此类的数据框:

  num letter
0   1      a
1   2      b
2   3      c

然后我要做的是计算数组中每个序列的第一个和最后一个数字之间的差,并最终将此差添加到df中的新列。

目前,我能够以这种方式计算每个序列中所需的差异:

for i in a:
    print(i[-1] - i[0])

给我以下结果:

6
30
12

我希望能够将print替换为df['new_col'],如下所示:

df['new_col'] = (i[-1] - i[0])

然后让我的df看起来像这样:

  num letter new_col
0   1      a      6
1   2      b      30
2   3      c      12

但是,我最终得到这个:

  num letter  new_col
0   1      a       12
1   2      b       12
2   3      c       12

如果有人能告诉我.diff().shift()等价于numpy,我也将不胜感激,因为我尝试的方式与您对pandas数据框的尝试一样,但是错误消息。如果我不仅要计算第一个和最后一个数字之间的差,还要计算两者之间的差,这对我很有用。

非常感谢您的帮助,

2 个答案:

答案 0 :(得分:2)

当前,您只在最后一个中执行差值计算

使用列表理解:

a = np.array([[1, 2, 3, 4, 5, 6, 7], [20, 25, 30, 35, 40, 45, 50], [2, 4, 6, 8, 10, 12, 14]])

b = [i[-1] - i[0] for i in a]

如果长度不匹配,则需要使用NaN扩展列表:

b = b + [np.NaN]*(len(df) - len(b))
df['new_col'] = b

答案 1 :(得分:1)

如果数组的大小增加,最好在DataFrame中执行此操作。

Optional("testing1")
Optional("testing2-1")
Optional("testing2-2")
Optional("testing3-1")
Optional("testing3-2")