【发布时间】:2019-07-31 07:44:51
【问题描述】:
我有一个如下所示的数据框
df2 = pd.DataFrame({'person_id':[1],'H1_date' : ['2006-10-30 00:00:00'], 'H1':[2.3],'H2_date' : ['2016-10-30 00:00:00'], 'H2':[12.3],'H3_date' : ['2026-11-30 00:00:00'], 'H3':[22.3],'H4_date' : ['2106-10-30 00:00:00'], 'H4':[42.3],'H5_date' : [np.nan], 'H5':[np.nan],'H6_date' : ['2006-10-30 00:00:00'], 'H6':[2.3],'H7_date' : [np.nan], 'H7':[2.3],'H8_date' : ['2006-10-30 00:00:00'], 'H8':[np.nan]})
如我上面的截图所示,我的源 datframe (df2) 包含很少的 NA
当我执行df2.stack() 时,我会丢失数据中的所有 NA。
但是,我想为 H7_date 和 H8 保留 NA,因为它们有对应的值/日期对。对于H7_date,我有一个有效值H7,对于H8,我有对应的H8_date。
我只想在两个值 (H5_date,H5) 均为 NA 时删除记录。
请注意,我这里只有几列,而我的真实数据有 150 多列,而且列名事先不知道。
我希望我的输出如下所示没有H5_date,H5,尽管它们是不适用的
【问题讨论】:
-
df2.stack(dropna=False)? -
对不起,这不起作用。我的意思是它仍然保留 H5Date、H5 的 NA 并显示它们。我想删除那些记录
-
melt方法的两个答案都有效,但对于@Jon Clements 的答案,我对.all和.any方法有点不清楚。所以,我将@tawab_shakeel 答案标记为解决方案。只是很清楚,由于我对 Python 的熟练程度有限,当应用于@Jon Clements 答案时,我无法理解 .any 和 .all 之间的区别。尽管如此,两个答案都给出了预期的输出