Если необходимо сначала не пропустить значения по группам в столбцах, используйте GroupBy.first
:
df = pract_df.groupby(['PID','date'], as_index=False).first()
print (df)
PID date ALC WBC per_neut
0 1 11/1/18 200.0 NaN NaN
1 1 11/2/18 NaN 1000.0 0.64
2 2 1/11/04 300.0 2000.0 0.77
Но если необходимо дублировать значения по группам, например 50
в последней группе для столбца ALC
, укажите агрегатную функцию, например sum
, mean
, если использовать first
, второе значение будет потеряно:
PID = [1, 1, 1, 2, 2, 2]
ALC = [200, np.nan, np.nan, 300, np.nan, 50]
WBC = [np.nan, 1000, np.nan, np.nan, 2000, np.nan]
per_neut = [np.nan, np.nan, 0.64, np.nan, np.nan, 0.77]
date = ['11/1/18', '11/2/18', '11/2/18', '1/11/04',
'1/11/04','1/11/04']
prac_dict = {'PID':PID, 'date':date, 'ALC':ALC, 'WBC':WBC,
'per_neut':per_neut}
pract_df = pd.DataFrame(prac_dict)
print (pract_df)
PID date ALC WBC per_neut
0 1 11/1/18 200.0 NaN NaN
1 1 11/2/18 NaN 1000.0 NaN
2 1 11/2/18 NaN NaN 0.64
3 2 1/11/04 300.0 NaN NaN
4 2 1/11/04 NaN 2000.0 NaN
5 2 1/11/04 50.0 NaN 0.77
df1 = pract_df.groupby(['PID','date'], as_index=False).sum(min_count=1)
print (df1)
PID date ALC WBC per_neut
0 1 11/1/18 200.0 NaN NaN
1 1 11/2/18 NaN 1000.0 0.64
2 2 1/11/04 350.0 2000.0 0.77
df2 = pract_df.groupby(['PID','date'], as_index=False).mean()
print (df2)
PID date ALC WBC per_neut
0 1 11/1/18 200.0 NaN NaN
1 1 11/2/18 NaN 1000.0 0.64
2 2 1/11/04 175.0 2000.0 0.77
df3 = pract_df.groupby(['PID','date'], as_index=False).first()
print (df3)
PID date ALC WBC per_neut
0 1 11/1/18 200.0 NaN NaN
1 1 11/2/18 NaN 1000.0 0.64
2 2 1/11/04 300.0 2000.0 0.77