我有一个非常大的数据帧,其 struct 通常是这样的:

df= pd.DataFrame({'org_id': [12023, 34340, 12023, 34953], #organization id
'year': [2010, 2010, 2011, 2012], #year of organization data
'2010_present': [1,1,0,0], #Dummy variable indicating whether the df contains an org's data for 2010
'2011_present': [1,0,1,0], #Dummy variable indicating whether the df contains an org's data for 2011
'2012_present': [0,0,0,1] #Dummy variable indicating whether the df contains an org's data for 2012
})

现在,我正在try 创建一个列(‘Following_y’),该列指示组织的数据是否存在于下一年的数据框中.例如,2010年组织12023的行将获得值1,因为组织12023的S数据也出现在2011年的数据框中.

数据帧的最新年份的行将得到np.nan的输入.(例如:2012年的组织条目将在‘Following_y’列中获得NA).基于以上内容,它将如下所示:

df['following_y']: [1,0,0,np.nan]

我认为解决这一问题的最好方法是使用如下所示的分组转换组合:

for year in list(df.year.unique())[-1]: 
    df['following_y']=df.loc[df['year']==year].groupby('org_id')[str(year+1)+'_present'].transform(lambda x: 1 if x==1 else 0)

但是,我收到以下错误:ValueError:序列的真值不明确.使用a.Empty、a.bool()、a.Item()、a.any()或a.all().

我认为这与我的lambda函数的x==1部分有关(也许我的Groupby Series对象不知何故不能使用这种if/Else格式?)在阅读了几个小时的帮助页面后,我将非常感激您能提供的任何建议或帮助!

推荐答案

与Andrej的路由相同,但简化为get:

df['following_y'] = df.apply(lambda r:r.get(f'{r["year"]+1}_present'), axis=1)

输出:

   org_id  year  2010_present  2011_present  2012_present  following_y
0   12023  2010             1             1             0          1.0
1   34340  2010             1             0             0          0.0
2   12023  2011             0             1             0          0.0
3   34953  2012             0             0             1          NaN

注意,根据yeardtype,您可能需要使用f'{int(r["year"]+1)}_present'.

Python相关问答推荐

如何计算列表列行之间的公共元素

Python Hashicorp Vault库hvac创建新的秘密版本,但从先前版本中删除了密钥

根据在同一数据框中的查找向数据框添加值

有症状地 destruct 了Python中的regex?

如何将Docker内部运行的mariadb与主机上Docker外部运行的Python脚本连接起来

我们可以为Flask模型中的id字段主键设置默认uuid吗

Python,Fitting into a System of Equations

Python中绕y轴曲线的旋转

Python解析整数格式说明符的规则?

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

* 动态地 * 修饰Python中的递归函数

如何在BeautifulSoup/CSS Select 器中处理regex?

Flask运行时无法在Python中打印到控制台

从源代码显示不同的输出(机器学习)(Python)

如何重新组织我的Pandas DataFrame,使列名成为列值?

当HTTP 201响应包含 Big Data 的POST请求时,应该是什么?  

裁剪数字.nd数组引发-ValueError:无法将空图像写入JPEG

如何在信号的FFT中获得正确的频率幅值

使用Scikit的ValueError-了解