划分下一行的值并在数据帧中创建列

时间:2019-02-04 12:45:05

标签: python python-3.x pandas dataframe

我有一个类似csv的

id,value
1,100
1,150
1,200
1,250
2,300
2,350
2,400
2,450

我想根据每个唯一ID的值生成一列。

例如:

  • id为1的前2行的值为100、150
  • 我正在尝试创建列raise,该列将像这样划分值
  • 100/100 = 1,因此带有加高列的第一行将有1
  • 150/100 = 1.5,因此带有加高列的第二行将有2
  • id 2相同
  • 250/250 = 1和300/250 = 1.166
  

我取了100,因为它是该id的第一个值,与第二个'id'相同   例如:

id,value
1,150
1,100
1,200
1,250

如果是这种情况,则输出应该是

id,value,raise
1,150,150/150
1,100,100/150
1,200,200/150
1,250,250/150

所以最终我的输出将是

   id  value  raise
0   1    100  1.000
1   1    150  1.500
2   1    200  2.000
3   1    250  2.500
4   2    300  1.000
5   2    350  1.166
6   2    400  1.333
7   2    450  1.500

除了在所有id中使用for循环外,我不知道如何创建它。

  

并非所有值都具有相同的间隔,这只是一个示例

1 个答案:

答案 0 :(得分:4)

GroupBy.transformGroupBy.first创建的Series划分列:

df['raise'] = df['value'].div(df.groupby('id')['value'].transform('first'))
print (df)
   id  value     raise
0   1    100  1.000000
1   1    150  1.500000
2   1    200  2.000000
3   1    250  2.500000
4   2    300  1.000000
5   2    350  1.166667
6   2    400  1.333333
7   2    550  1.833333