如何在数据框中添加到列

2024-03-29 10:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

假设你有数据帧

 ID     data 
1  1234    123     
2  1234    213     
3  1234    432   
4  1234    32     
5  1234    54     
6  5678    67     

您想添加一个名为“calculation”的新列,该列返回函数: 数据[1]-数据[0]/数据[0](因为我们需要来自上一个单元格的数据,‘计算’的第一个单元格将是0)

如何添加此列?如何编写此函数以接收存储数据的行中不存在的值?你知道吗


Tags: 数据函数iddatacalculation
2条回答

在您提到的例子中,您将使用diff。例如:

import pandas as pd

df = pd.DataFrame({'data':[123, 312, 432, 32, 54, 67]})
df['new'] = df['data'].diff() / df['data']

由此产生:

   data        new
0   123        NaN
1   312   0.605769
2   432   0.277778
3    32 -12.500000
4    54   0.407407
5    67   0.194030

不过,一般来说,这些类型的东西都是矢量化技巧。移动和切片非常有用。例如,假设我们想要

(data[i] + data[i+1]) / data[i]

如果您熟悉numpy数组,您可能会尝试:

df['new'] = (df['data'][:-1] + df['data'][1:]) / df['data']

由于pandas处理自动对齐的方式,此结果将与我们之前的结果略有不同:

   data  new
0   123  NaN
1   312    2
2   432    2
3    32    2
4    54    2
5    67  NaN

因此,对于pandas,最好显式地移动序列,而不是使用切片,在这种情况下:

df['new'] = (df['data'].shift(1) + df['data']) / df['data'].astype(float)

这将产生:

   data        new
0   123        NaN
1   312   1.394231
2   432   1.722222
3    32  14.500000
4    54   1.592593
5    67   1.805970

你只需找出相对差异,然后输入0:

import pandas as pd

df = pd.DataFrame({
    'data': range(5)
})

df['calc'] = (df.data.shift(1) - df.data) / df.data
df.calc.values[0] = 0

>>> df
    data    calc
0   0   0
1   1   -1.000000
2   2   -0.500000
3   3   -0.333333
4   4   -0.250000

5 rows × 2 columns

相关问题 更多 >