【发布时间】:2019-08-13 09:42:18
【问题描述】:
我有一个如下所示的数据框
data_file= pd.DataFrame({'person_id':[1,1,1,1,2,2,2,3,3,3],'ob.date': [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan],
'observation': ['Age','interviewdate','marital_status','interviewdate','Age','interviewdate','marital_status','Age','interviewdate','marital_status'],
'answer': [21,'21/08/2017','Single','22/05/2217', 26,'11/03/2010','Single',41,'31/09/2012','Married']
})
我想做的是,从answer 列中获取date values 并将其放入ob.date 列中。提供的数据框显示person_id =1 在21/08/2017 上回答了关于年龄的问题,在22/05/2017 上回答了关于marital_status 的问题
这是我根据另一篇帖子的 SO 建议尝试的方法
s = data_file[(data_file.observation == 'interviewdate')].set_index('person_id')['answer']
data_file['ob.date'] = data_file['person_id'].map(s)
但这不起作用,因为我得到了duplicate index error。我怎样才能避免这个问题并使其足够高效?
因此,任何优雅高效的解决方案都会有所帮助。 Person_id = 1 有两个日期值,因此用来自answer 列(interviewdate 观察)的值填充interviewdate 观察上方的所有行
我怎么能期望我的输出是这样的?
【问题讨论】:
-
第一个
person_id的策略是什么?在匹配日期之前填写interviewdate上方的所有行? -
是的。多于。你是对的。
标签: python python-3.x pandas dataframe pandas-groupby