小编典典

在Python中的堆栈操作期间保留少量NA并删除其余NA

python

我有一个如下所示的数据帧

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]})

As shown in my screenshot above, my source datframe (df2) contains few NA’s

当我执行“df2.stack()”时,我会丢失数据中的所有NA。 不过,我想保留NA的'H7\u date'和'H8',因为他们有 它们对应的值/日期对。对于'H7\u date',我有一个有效值对于H7和H8,我得到了它对应的日期。
我只想在两个值(H5\u dateH5)都为空时删除记录
不。
请注意,我这里只有几列,我的真实数据超过了
150列和列名事先未知。
我希望我的输出如下图所示这是不可能的
有’H5_date’,’H5’,尽管他们是NA的


阅读 140

收藏
2020-12-20

共1个答案

小编典典

try pd.DataFrame.melt

df = pd.melt(df2, id_vars='person_id', var_name='col', value_name='dates')
df['col2'] = df['col'].str.split("_").str[0]
df['count'] = df.groupby(['col2'])['dates'].transform(pd.Series.count)
df = df[df['count'] != 0]
df.drop(['col2', 'count'], axis=1, inplace=True)
print(df)



    person_id      col                dates
0           1  H1_date  2006-10-30 00:00:00
1           1       H1                  2.3
2           1  H2_date  2016-10-30 00:00:00
3           1       H2                 12.3
4           1  H3_date  2026-11-30 00:00:00
5           1       H3                 22.3
6           1  H4_date  2106-10-30 00:00:00
7           1       H4                 42.3
10          1  H6_date  2006-10-30 00:00:00
11          1       H6                  2.3
12          1  H7_date                  NaN
13          1       H7                  2.3
14          1  H8_date  2006-10-30 00:00:00
15          1       H8                  NaN
2020-12-20