【问题标题】:Selecting and using duplicate rows in a Pandas dataFrame在 Pandas 数据框中选择和使用重复行
【发布时间】:2019-02-05 14:23:09
【问题描述】:

我有以下数据作为 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 是另一个关键部分。

【问题讨论】:

    标签: python pandas dataframe duplicates reformatting


    【解决方案1】:

    DataFrame.pivotDataFrame.fillna 一起使用:

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

    set_indexunstack 和参数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
    

    编辑:

    问题是一些数据对(qsoNamefilterID)重复,所以需要pivot_table

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

    【讨论】:

    • 不;收到“ValueError:索引包含重复条目,无法重塑”错误。
    • @npross - 所以需要聚合值,因为重复 - 使用 df = df.pivot_table(index='qsoName',columns='filterID', values='aperMag', fill_value=-999.99999, aggfunc='mean')
    • 顺便说一句,我使用的实际 .csv 数据文件位于:github.com/d80b2t/StackOverflow/tree/master/54536518
    • 好的,聚合值的东西似乎起作用了。如果您编辑上面的答案,我可以打勾以结束问题。
    • @npross - 完成。
    猜你喜欢
    • 2018-03-10
    • 1970-01-01
    • 2017-08-10
    • 2020-12-23
    • 2018-11-02
    • 2020-06-09
    • 2020-10-06
    相关资源
    最近更新 更多