【问题标题】:How can I remove columns of pandas dataframe conditional on last row values?如何删除以最后一行值为条件的熊猫数据框列?
【发布时间】:2019-11-07 23:01:42
【问题描述】:

给定一个像这样的数据框:

             A  B  C
2019-11-02  120 25 11
2019-11-03  119 28 15
2019-11-04  115 23 18
2019-11-05  119 30 20
2019-11-06  121 32 25
2019-11-07  117 24 30

我想删除最后一行的值小于 (

             A  C
2019-11-02  120 11
2019-11-03  119 15
2019-11-04  115 18
2019-11-05  119 20
2019-11-06  121 25
2019-11-07  117 30

谢谢

【问题讨论】:

    标签: python pandas dataframe subset


    【解决方案1】:

    方法一:

    使用ilocltdrop

    我们选择带有iloc[-1]的最后一行,然后检查哪一列是less than (lt)25并将该列传递给DataFrame.drop

    df = df.drop(columns = df.columns[df.iloc[-1].lt(25)])
    

    方法二:

    使用taililocgtall

    df = df.loc[:, df.tail(1).gt(25).all()]
    
                  A   C
    2019-11-02  120  11
    2019-11-03  119  15
    2019-11-04  115  18
    2019-11-05  119  20
    2019-11-06  121  25
    2019-11-07  117  30
    

    分步方法1

    # select last row
    
    df.iloc[-1]
    
    A    117
    B     24
    C     30
    Name: 2019-11-07, dtype: int64
    
    # check which columns have value < 25:
    
    df.iloc[-1].lt(25)
    
    A    False
    B     True
    C    False
    Name: 2019-11-07, dtype: bool
    
    # select those column(s) with boolean indexing:
    
    df.columns[df.iloc[-1].lt(25)]
    
    Index(['B'], dtype='object')
    
    # finally pass it DataFrame.drop
    
    df.drop(columns = df.columns[df.iloc[-1].lt(25)])
    
                  A   C
    2019-11-02  120  11
    2019-11-03  119  15
    2019-11-04  115  18
    2019-11-05  119  20
    2019-11-06  121  25
    2019-11-07  117  30
    

    【讨论】:

    • 如果您想修改数据框df,那么您可以将标志inplace 包含为True。查看文档pandas.pydata.org/pandas-docs/stable/reference/api/…
    • 我知道,这只是为了展示示例。顺便说一句 inplace=True 不鼓励,并将在未来版本的 pandas 中删除
    • 是的,只是将它作为评论分享,以防有人想知道它。 ;-)
    猜你喜欢
    • 2013-12-29
    • 1970-01-01
    • 2016-05-07
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    相关资源
    最近更新 更多