Python 如何仅基于组中的一行调整groupby中的更改

Python 如何仅基于组中的一行调整groupby中的更改,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我试图根据groupby中单行中的条件更改groupby中的列 我的数据如下所示: ID year month type 1 2008 1 A 1 2008 2 NAN 1 2009 1 B 2 2003 3 B 2 2003 4 B 2 2003 8 A 3 2009 9 B 我想通过以下方式更改数据: 对于每个

我试图根据groupby中单行中的条件更改groupby中的列

我的数据如下所示:

ID  year    month   type

1   2008    1       A

1   2008    2       NAN

1   2009    1       B

2   2003    3       B

2  2003     4       B

2  2003     8       A

3  2009     9       B 
我想通过以下方式更改数据: 对于每个ID,如果2008年1月或2月有一行的类型值为非NAN,则对于2008年1月至2009年12月期间的所有行,如果存在Fab 2008行,则将该类型替换为Fab 2008行的类型;如果不存在,则将该类型替换为Fab 2008行的类型


我尝试过使用.groupby(id).isin({'year':[2008],'month':[1,2]}).any(),但它只是生成一个新的布尔变量,而不是更改现有变量

为什么不对所有行强制执行严格类型?然后,您的问题简化为:

month_years = df.loc[:, ['year', 'month']]
updated_types = get_default_types(month_years)
updated_df = df.assign(type=updated_types)

你想要分组的是什么?另外,为什么不应用您的更改,然后再对数据进行分组呢?或者您可以使用DataFrame的apply()方法:我的主要问题是如何通过以下行的存在来调整函数((df.groupby('id').loc['year'==2008,'month'==1])|(df.groupby('id').loc['year'==2008,'month'==2))&(df.groupby('id.).type'.notna())