在下面的示例中,最好的分组方式是什么,这样就可以有一个新的列,该列是通过在每个组中取第一年并减go 当前年份而形成的.例如,在索引为0的行中,它将是NaN,索引为1的行,它将=1,索引为2的行,它将=3,索引为4的行,等等.

>>> 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

推荐答案

Yearfirst进行变换,得到每id的第一年,然后从Year列中减go 该值,得到差值,最后mask差值为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相关问答推荐

为什么Pydantic在我申报邮箱时说邮箱丢失

使用unmanagedexports从Python调用的c#DLC

如何从维基百科的摘要部分/链接列表中抓取链接?

尽管进程输出错误消息,subProcess.check_call的CalledProcess错误.stderr为无

在Python中根据id填写年份系列

如何在Power Query中按名称和时间总和进行分组

如何在Python中按组应用简单的线性回归?

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

Python plt.text中重叠,包adjust_text不起作用,如何修复?

通过仅导入pandas来在for循环中进行多情节

如何使用Google Gemini API为单个提示生成多个响应?

Python会扔掉未使用的表情吗?

DataFrame groupby函数从列返回数组而不是值

Matlab中是否有Python的f-字符串等效物

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

Odoo 16使用NTFS使字段只读

Scrapy和Great Expectations(great_expectations)—不合作

lityter不让我输入左边的方括号,'

Polars将相同的自定义函数应用于组中的多个列,

以逻辑方式获取自己的pyproject.toml依赖项