【问题标题】:Remove rows of a dataframe based on the row number根据行号删除数据框的行
【发布时间】:2019-09-15 00:49:58
【问题描述】:

假设我有一个数据框 (DF) 并且我有一个这样的数组:

rm_indexes = np.array([1, 2, 3, 4, 34, 100, 154, 155, 199])

我想从DF 中删除rm_indexes 中的行号。 rm_indexes 中的一个表示第一行(DF 的第二行),三表示数据帧的第三行,依此类推(第一行为 0)。该数据帧的索引列是时间戳。

PS。我有许多相同的时间戳作为数据帧的索引。

【问题讨论】:

    标签: python pandas numpy dataframe indexing


    【解决方案1】:

    试试:

    df.drop(df.index[rm_indexes])
    

    示例

    import pandas as pd
    
    df = pd.DataFrame({"A":[0,1,2,3,4,5,6,7,8],
                       "B":[0,1,2,3,4,5,6,7,8],
                       "C":[0,1,2,3,4,5,6,7,8]})
    
    pos = [0,2,4]
    df.drop(df.index[pos], inplace=True)
    

    输出

        A   B   C
    1   1   1   1
    3   3   3   3
    5   5   5   5
    6   6   6   6
    7   7   7   7
    8   8   8   8
    

    编辑,在 OP 提供的进一步规范之后:具有相同索引的多行

    df = pd.DataFrame({"A":[0,1,2,3,4,5,6,7,8],
                       "B":[0,1,2,3,4,5,6,7,8],
                       "C":[0,1,2,3,4,5,6,7,8],},
                       index=["a","b","b","a","b","c","c","d","e"])
    df['idx'] = df.index
    
    pos = [1]
    df.reset_index(drop=True, inplace=True)
    df.drop(df.index[pos], inplace=True)
    df.set_index('idx', inplace=True)
    

    输出

        A   B   C
    idx         
    a   0   0   0
    b   2   2   2
    a   3   3   3
    b   4   4   4
    c   5   5   5
    c   6   6   6
    d   7   7   7
    e   8   8   8
    

    【讨论】:

    • 我检查了这个。我认为这里的问题是我的时间戳与我的索引相同。因此,假设我通过您的方法删除了第 2 行。它不仅会删除第二行,还会删除所有其他类似的时间戳。
    【解决方案2】:

    您可以简单地按索引删除。这将通过索引 1、2、3、4..etc 删除 df 中的条目。199。

    df.reset_index()    #this will change the index from timestamp to 0,1,2...n-1
    df.drop([1, 2, 3, 4, 34, 100, 154, 155, 199])  # will drop the rows
    df.index = df['myTimeStamp']  # this will restore the index back to timestamp
    

    【讨论】:

    • 这个数据框的索引列是时间戳
    • 哦..你改变了SO问题。索引是时间戳。让我编辑一下。
    • df.reset_index(inplace=True)drop 也是如此。
    • 我应该添加一个名为myTimeStamp 的新列吗?我认为第三行应该是df.index = df['time']
    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    相关资源
    最近更新 更多