嗨,我是新手,学习大熊猫进行数据分析。我有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
我在获取当前列的上限值时被卡住了。需要帮助如何实现这一目标。
答案 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)
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