Python 如何仅基于组中的一行调整groupby中的更改
我试图根据groupby中单行中的条件更改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 我想通过以下方式更改数据: 对于每个
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())