比较pandas数据帧中的行和上一行

时间:2017-01-16 18:12:12

标签: python pandas compare

我有以下表格的纵向数据

import pandas as pd

df = pd.DataFrame({
    'a': ['apples', 'plums', 'pears', 'pears', 'pears'],
    'b': ['grapes', 'grapes', 'grapes', 'grapes', 'bananas'],
    'c': [0, 0, 1, 0, 1]
})

和一个比较列表的功能(这个细节并不重要)

def compare(old_fruit, new_fruit):
    if set(new_fruit) - set(old_fruit) == {'pears'}:
        return 1
    else:
        return 0
当我感兴趣的ca发生更改时,

b为1。我想找到c = 1的行,抓住值此时ab加上前一行ab的值,使用我的函数比较它们,并在数据框中添加一个新系列比较的结果。

对于上面的示例,我所需的操作将执行compare(['plums', 'grapes'], ['pears', 'grapes'])compare(['pears', 'grapes'], ['pears', 'bananas'])并将系列[0, 0, 1, 0, 0]添加到数据帧,即所需的输出是一个数据帧,如下所示:

pd.DataFrame({
    'a': ['apples', 'plums', 'pears', 'pears', 'pears'],
    'b': ['grapes', 'grapes', 'grapes', 'grapes', 'bananas'],
    'c': [0, 0, 1, 0, 1],
    'd': [0, 0, 1, 0, 0]
})

1 个答案:

答案 0 :(得分:0)

完全按照矢量化方式进行比较:

df_set = df[['a', 'b']].apply(set, axis=1)

df_set
Out[38]: 
0    {grapes, apples}
1     {grapes, plums}
2     {grapes, pears}
3     {grapes, pears}
4    {bananas, pears}
dtype: object

(df_set - df_set.shift()) == {'pears'}
Out[39]: 
0    False
1    False
2     True
3    False
4    False
dtype: bool