【问题标题】:Using pd.apply() with shift to compare adjacent rows使用 pd.apply() 和 shift 来比较相邻行
【发布时间】:2016-06-20 15:42:43
【问题描述】:

我想比较两个单独列上的相邻行。我有一个dataframe,有两列,LetterBoolean_Value。我想创建一个新列New Col,其中的值为TrueFalse

为真值:

下一行(更高的索引)必须共享相同的 Letter 值,并且下一行的 Boolean_Value 必须为 True。

为假值:

所有其他场景

我的代码,产生所有错误值:

import pandas as pd
df = pd.DataFrame(data=[['A', False],
                        ['A', True],
                        ['B', False],
                        ['B', False],
                        ['B', True]]
                  ,columns=['Letter', 'Boolean_Value'])

def my_test2(row):
    try:
        if row['Letter'].shift(1) == row['Letter'] and row['Boolean_Value'].shift(1) == True:
            return True
        else:
            return False
    except:
        return False

df['New Col'] = df.apply(my_test2, axis=1)

print df

产量:

  Letter Boolean_Value New Col
0      A         False   False
1      A          True   False
2      B         False   False
3      B         False   False
4      B          True   False

期望的输出:

  Letter Boolean_Value New Col
0      A         False   True
1      A          True   False
2      B         False   False
3      B         False   True
4      B          True   False

【问题讨论】:

    标签: python python-2.7 pandas dataframe


    【解决方案1】:

    你可以:

    df['new_col'] = (df.Letter == df.Letter.shift(-1)) & df.Boolean_Value.shift(-1)
    
      Letter Boolean_Value new_col
    0      A         False    True
    1      A          True   False
    2      B         False   False
    3      B         False    True
    4      B          True   False
    

    【讨论】:

      【解决方案2】:

      试试这个:

      import pandas as pd
      df = pd.DataFrame(data=[['A', False],
                              ['A', True],
                              ['B', False],
                              ['B', False],
                              ['B', True]]
                        ,columns=['Letter', 'Boolean_Value'])
      
      
      df['New Col'] = df['Letter'] == df['Letter'].shift(-1)
      df['New Col'] = df['New Col'] != df['Boolean_Value'].shift(1)
      
      print(df)
      

      【讨论】:

        猜你喜欢
        • 2017-09-17
        • 2019-10-09
        • 1970-01-01
        • 2017-12-28
        • 2015-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多