确定列值更改以及发生的更改

Determining column value change and which change takes place

我正在分析眼动数据。我有一个带有 'row' 列的 df,它告诉我查看了哪个图像。我有 9 张图片,属于 3 个类别。

Category 1 = [1,2,3]
Category 2 = [4,5,6]
Category 3 = [7,8,9]

我想要一个新列“更改”,它会在“roi”列中的数字发生变化时告诉我,以及变化是在类别内还是在类别之间。

如果列表类别 1 中的数字之间发生变化,则应显示 'C1'。

如果列表类别 2 中的数字之间发生变化,则应显示 'C2'。

如果变化发生在列表类别 3 中的数字之间,那么 'C3' 应该出现。

如果更改发生在不在同一个列表中的号码之间,则 'X' 应该会出现。

Roi =[3,3,3,2,2,5,5,6,6,9,7,1]
Change = ['nan','nan','nan','C1','nan','X','nan','C2','nan','X','C3','X']
zipped = list(zip(Roi, Change))
df = pd.DataFrame(zipped, columns=['Roi', 'Change'])
print(df)

    Roi Change
0     3    nan
1     3    nan
2     3    nan
3     2     C1
4     2    nan
5     5      X
6     5    nan
7     6     C2
8     6    nan
9     9      X
10    7     C3
11    1      X

使用np.select:

C1 = [1,2,3]
C2 = [4,5,6]
C3 = [7,8,9]

roi = df["Roi"]
prev_roi = roi.shift()

df["Change"] = np.select(
    [
        (roi == prev_roi) | prev_roi.isnull(),
        roi.isin(C1) & prev_roi.isin(C1),
        roi.isin(C2) & prev_roi.isin(C2),
        roi.isin(C3) & prev_roi.isin(C3),
        roi != prev_roi
    ],
    [
        "nan",
        "C1",
        "C2",
        "C3",
        "X",
    ],
)