在 Pandas 数据框中选择和使用重复行
Selecting and using duplicate rows in a Pandas dataFrame
我有以下数据作为 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['qsoName']
的一个值选择不同的 df['aperMag']
值,默认值为 -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 的重新格式化是另一个关键部分。
使用DataFrame.pivot
with DataFrame.fillna
:
df = df.pivot('qsoName','filterID','aperMag').fillna(-999.99999)
或set_index
with 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')
我有以下数据作为 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['qsoName']
的一个值选择不同的 df['aperMag']
值,默认值为 -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 的重新格式化是另一个关键部分。
使用DataFrame.pivot
with DataFrame.fillna
:
df = df.pivot('qsoName','filterID','aperMag').fillna(-999.99999)
或set_index
with 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')