根据其他列的值作为一个组在一列中设置值
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)
我有一个看起来像这样的 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)