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