我有以下表格的纵向数据
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
当我感兴趣的c
和a
发生更改时, b
为1。我想找到c
= 1的行,抓住值此时a
和b
加上前一行a
和b
的值,使用我的函数比较它们,并在数据框中添加一个新系列比较的结果。
对于上面的示例,我所需的操作将执行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]
})
答案 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