【问题标题】:Remove rows having different consecutive values in dataframe using Pandas使用 Pandas 删除数据框中具有不同连续值的行
【发布时间】:2018-03-14 18:09:01
【问题描述】:

我有以下数据框:

import pandas as pd
df = pd.DataFrame({"A":['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'], "M":[11,4,9,2,2,5,5,6,6]})

我的目标是删除所有列M 的连续值不相等的所有行。

因此应删除第 0、1 和 2 行,因为 M 的值是:11!=4、4!=9 和 9!=2)。但是,如果 2 行具有相同的连续值,则必须保留:第 3 行和第 4 行必须保留,因为它们的值都为 2。第 5 行和第 6 行的值为 5 的推理相同。

我能够通过使用以下代码行来实现我的目标:

l=[]
for i, row in df.iterrows():
    try:
        if df["M"].iloc[i]!=df["M"].iloc[i+1] and df["M"].iloc[i]!=df["M"].iloc[i-1]:
            l.append(i)
    except:
        pass
df = df.drop(df.index[l]).reset_index(drop=True)

您能否提出一种更聪明、更好的方法来实现我的目标?也许通过使用一些内置的 pandas 功能?

数据框应该是这样的:

Before: 
   A   M
0  a  11 <----Must be removed
1  s   4 <----Must be removed
2  d   9 <----Must be removed
3  f   2
4  g   2
5  h   5
6  j   5
7  k   6
8  l   6

After
   A  M
0  f  2
1  g  2
2  h  5
3  j  5
4  k  6
5  l  6

【问题讨论】:

    标签: python pandas dataframe row


    【解决方案1】:

    通过使用diff

    df.loc[df.M.isin(df[df.M.diff()==0].M),:]
    Out[140]: 
       A  M
    3  f  2
    4  g  2
    5  h  5
    6  j  5
    7  k  6
    8  l  6
    

    注意前一个可能不起作用。(当 1,1,2,1,3,4 时)

    m=df[df.M.diff()==0].index.values.tolist()
    m.extend([x-1 for x in m])
    df.loc[set(m)].sort_index()
    

    MaxU 的另一个好答案:

    df.loc[df.M.diff().eq(0) | df.M.diff(-1).eq(0)]
    

    【讨论】:

    • 怎么样:df.loc[df.M.diff().eq(0) | df.M.diff(-1).eq(0)]?
    • @MaxU 不错的解决方案,将其添加为答案,伙计〜:)
    • 这将与您的和 jezraels 相似...请随时将其添加到您的答案中 ;-)
    【解决方案2】:

    使用boolean indexingmasks 创建的shift

    m = (df["M"].eq(df["M"].shift()) | df["M"].eq(df["M"].shift(-1)))
    #alternative
    #m = ~(df["M"].ne(df["M"].shift()) &  df["M"].ne(df["M"].shift(-1)))
    print (df[m])
       A  M
    3  f  2
    4  g  2
    5  h  5
    6  j  5
    7  k  6
    8  l  6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 2020-08-31
      • 2019-11-21
      • 2021-08-05
      • 1970-01-01
      相关资源
      最近更新 更多