在以下示例中,最好进行分组,以便可以通过在每个组中取第一年并减去当前年份来形成一个新列。例如,在索引为 0 的行中,它将为 NaN,在索引为 1 的行中,它将 = 1,在索引 2 的行中,它将 = 3,在索引 4 的行中,它将 = 1 等等。
>>> import pandas as pd
>>> df = pd.DataFrame({'id': ['1', '1', '1', '2', '2', '3', '4', '4'],
... 'Year': [2000, 2001, 2003, 2004, 2005, 2002, 2001, 2003]})
>>> print(df)
id Year
0 1 2000
1 1 2001
2 1 2003
3 2 2004
4 2 2005
5 3 2002
6 4 2001
7 4 2003
最佳答案
使用 first
转换 Year
以获取每个 id
的第一年,然后从 Year
列中减去它获取差异,最后屏蔽
差异为0
的值:
s = df['Year'] - df.groupby('id')['Year'].transform('first')
df['col'] = s.mask(s == 0)
id Year col
0 1 2000 NaN
1 1 2001 1.0
2 1 2003 3.0
3 2 2004 NaN
4 2 2005 1.0
5 3 2002 NaN
6 4 2001 NaN
7 4 2003 2.0
关于python - 如何通过从组中减去元素来创建变量?例如,每组每行的值 - 组值的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72313150/