我在熊猫中有以下df:
person year A B
AA 1998 5
AA 1999 10
AA 2000 15
XB 2010 100
CY 1980 3
CY 1981 9
CY 1982 36
CY 1983 72
MJ 2017 120
MJ 2018 240
我想按 year 的顺序遍历df中的每个 person ,并比较它们的 column A 值,例如百分比差异,然后将该值放在B列中。例如,1999 AA-该值比1998 AA列A值大200%。 2000 AA值将为150%,依此类推。
某人出现的第一年,B列值将为零-例如,AA 1998-B列值将为零,因为没有与之比较的前一年。
我想知道如何启动迭代以专门查看此人,然后再查看年份,然后将该年份的A列值与上一年的值进行比较。这将重复直到结识新朋友。
答案 0 :(得分:3)
dfshift = df.groupby('person')['A'].transform(lambda x: x.shift())
df['B'] = (df['A']/dfshift)*100
df['B'].fillna(0, inplace = True)
person year A B
0 AA 1998 5 0.0
1 AA 1999 10 200.0
2 AA 2000 15 150.0
3 XB 2010 100 0.0
4 CY 1980 3 0.0
5 CY 1981 9 300.0
6 CY 1982 36 400.0
7 CY 1983 72 200.0
8 MJ 2017 120 0.0
9 MJ 2018 240 200.0
这应该按照您的意思进行。只需对A进行较小的转换即可获取要比较的值,然后执行所需的操作。请注意,虽然必须正确排序您的年份值才能起作用。