根据其他列的值作为一个组在一列中设置值

Set values in a column based on the values of other columns as a group

我有一个看起来像这样的 df:

  name A B C D
1 bar  1 0 1 1
2 foo  0 0 0 1
3 cat  1 0-1 0
4 pet  0 0 0 1
5 ser  0 0-1 0
6 chet 0 0 0 1

我需要使用 loc 方法根据其他列的值作为一个组在新列 ('E') 中添加值,例如,如果值为 [1,0, 0,0] E 列中的值将为 1。我试过这个:

d = {'A': 1, 'B': 0, 'C': 0, 'D': 0}
A = pd.Series(data=d, index=['A', 'B', 'C', 'D']) 
df.loc[df.iloc[:, 1:] == A, 'E'] = 1

没用。由于数据集很大,我需要使用 loc 方法或其他基于 numpy 的方法。如果可以避免创建一个系列来比较行,那也很好,以某种方式提取 A B C D 列的值并将它们作为每一行的一组进行比较。

您可以将值与 A 进行比较,测试是否匹配 DataFrame.all 中的所有行:

df.loc[(df == A).all(axis=1), 'E'] = 1

对于 0,1 列:

df['E'] = (df == A).all(axis=1).astype(int)

df['E'] = np.where(df == A).all(axis=1), 1, 0)