通过从以前的索引列计算,在pandas数据框中创建新列

时间:2017-08-15 15:08:12

标签: python pandas dataframe

嗨,我是新手,学习大熊猫进行数据分析。我有2列数据

A   B
1   2   
2   3
3   4
4   5

我想创建第三列C,其结果将由B列计算,通过用当前值减去上限值并除以当前值。

A   B   C
1   2   
2   3   0.33
3   4   0.25
4   5   0.2

例如,C列的第一行值为空,因为没有大于2的值。

0.33 = > 3 - 2 / 3 , 
0.25 = > 4 - 3 / 4 ,
0.2 = > 5 - 4 / 5 and so on

我在获取当前列的上限值时被卡住了。需要帮助如何实现这一目标。

3 个答案:

答案 0 :(得分:3)

使用shift移动列,然后剩下的操作是常规操作(sub和div):

df['B'].sub(df['B'].shift()).div(df['B'])
Out: 
0         NaN
1    0.333333
2    0.250000
3    0.200000
Name: B, dtype: float64

如果您愿意,也可以在不链接方法的情况下完成。

(df['B'] - df['B'].shift()) / df['B']
Out[48]: 
0         NaN
1    0.333333
2    0.250000
3    0.200000
Name: B, dtype: float64

答案 1 :(得分:3)

编辑处理NaN和小数。

df['C'] = (1 - df.B.shift() / df.B).map(lambda x: '{0:.2f}'.format(round(x,2))).replace('nan','')

输出:

   A  B     C
0  1  2      
1  2  3  0.33
2  3  4  0.25
3  4  5  0.20

让我们使用shift简化并使用以下内容来获取之前的值:

df['C'] = 1 - df.B.shift() / df.B

输出:

   A  B         C
0  1  2       NaN
1  2  3  0.333333
2  3  4  0.250000
3  4  5  0.200000

答案 2 :(得分:1)

或者您只需使用diff

即可
df2.B.diff()/df2.B
Out[545]: 
0         NaN
1    0.333333
2    0.250000
3    0.200000
Name: B, dtype: float64