使用带有shift的pd.apply()来比较相邻的行

时间:2016-06-20 15:42:44

标签: python python-2.7 pandas dataframe

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

要使值为真:

下一行(较高的索引)必须共享相同的Letter值,下一行必须具有Boolean_Value的真。

表示该值为false:

所有其他方案

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

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

2 个答案:

答案 0 :(得分:2)

你可以:

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

答案 1 :(得分:1)

试试这个:

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)