Выбор и использование повторяющихся строк в dataFrame Pandas - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть следующие данные как часть Pandas DataFrame, df ::

  qsoName,filterID,aperMag 
0 PSOJ000,3,+19.284586
1 PSOJ007,2,+20.334393
2 PSOJ007,3,+20.226970
3 PSOJ007,4,+20.288778   
4 PSOJ007,5,+20.189209
5 PSOJ011,2,+21.037594
6 PSOJ011,4,+20.642813            
7 PSOJ011,5,+20.760576 

, и я хотел бы выбрать различные значения df['aperMag'] для одного значения df['qsoName']с -999.99999 по умолчанию, например

 PSOJ000,-999.99999,+19.284586,-999.99999,-999.99999
 PSOJ007,+20.334393,+20.226970,+20.288778,+20.189209
 PSOJ011,+21.037594,-999.99999,+20.642813,+20.760576 

Такое ощущение, что df["qsoName"].duplicated() должно работать, но переформатирование DataFrame является другой ключевой частью.

1 Ответ

0 голосов
/ 05 февраля 2019

Используйте DataFrame.pivot с DataFrame.fillna:

df = df.pivot('qsoName','filterID','aperMag').fillna(-999.99999)

Или set_index с unstack и параметр fill_value:

df = df.set_index(['qsoName','filterID'])['aperMag'].unstack(fill_value=-999.99999)

print (df)
filterID           2           3           4           5
qsoName                                                 
PSOJ000  -999.999990   19.284586 -999.999990 -999.999990
PSOJ007    20.334393   20.226970   20.288778   20.189209
PSOJ011    21.037594 -999.999990   20.642813   20.760576

Последнее, если необходимо:

df = df.reset_index().rename_axis(None,axis=1)
print (df)
   qsoName           2           3           4           5
0  PSOJ000 -999.999990   19.284586 -999.999990 -999.999990
1  PSOJ007   20.334393   20.226970   20.288778   20.189209
2  PSOJ011   21.037594 -999.999990   20.642813   20.760576

РЕДАКТИРОВАТЬ:

Проблема в некоторых парах данных(qsoName, filterID) дублируются, поэтому необходимо pivot_table:

df = df.pivot_table(index='qsoName',
                    columns='filterID', 
                    values='aperMag', 
                    fill_value=-999.99999, 
                    aggfunc='mean')
...