1

我有一个如下所示的数据框:

arr = pd.DataFrame([[0,0],[0,1],[0,4],[1,4],[1,5],[1,6],[2,5],[2,8],[2,6])

我想要的输出是表示第 2 列中的值是否在下一个连续组中的布尔值。这些组由第 1 列中的值表示。例如,4 显示在第 0 组和下一个连续组,第 1 组中:

output = pd.DataFrame([[False],[False],[True],[False],[True],[True],[Nan],[Nan],[Nan]])

第 2 组的输出将是 Nan,因为第 3 组不存在。

到目前为止,我已经尝试过:

output = arr.groupby([0])[1].isin(arr.groupby([0])[1].shift(periods=-1))

这不起作用,因为我无法isin()groupby series.

4

1 回答 1

1

您可以创建一个包含移位组项目列表的辅助列,然后使用返回True, Falseof的函数对其进行检查NaN

import pandas as pd
import numpy as np

arr = pd.DataFrame([[0,0],[0,1],[0,4],[1,4],[1,5],[1,6],[2,5],[2,8],[2,6]])
arr = pd.merge(arr, arr.groupby([0]).agg(list).shift(-1).reset_index(), on=[0], how='outer')

def check_columns(row):
    try:
        if row['1_x'] in row['1_y']:
            return True
        else:
            return False
    except:
        return np.nan
    
arr.apply(check_columns, axis=1)

结果:

0    False
1    False
2     True
3    False
4     True
5     True
6      NaN
7      NaN
8      NaN
于 2021-07-25T22:44:20.323 回答