取决于多个值的数据框值

时间:2020-01-17 22:12:16

标签: python pandas dataframe

我在熊猫中有以下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列值与上一年的值进行比较。这将重复直到结识新朋友。

1 个答案:

答案 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进行较小的转换即可获取要比较的值,然后执行所需的操作。请注意,虽然必须正确排序您的年份值才能起作用。