python - 如何根据其他列的条件分配新列?
问题描述
我正在尝试根据 A、B、C、D 中存在的值添加一列“flag_column”。
即如果A/B/C/DI中有值想创建一个新列,'flag'表示包含值的列名。
A B C D counts flag
0 1 0 0 0 1 A
1 0 1 0 0 1 B
2 1 0 0 0 1 A
3 0 0 1 0 1 C
4 0 1 0 0 1 B
注意:只有一列(A 到 D)包含一个值,因此计数始终为 1。
我试过了:
if [df['A'] == 1] == True:
df['flag'] = 'A'
elif [df['B'] == 1] == True:
df['flag'] = 'B'
elif [df['C'] == 1] == True:
df['flag'] = 'C'
else:
df['flag'] = 'D'
我也试过:
df['flag'] = np.where(df['A'] == 1, 'A', False)
df['flag'] = np.where(df['B'] == 1, 'B', False)
df['flag'] = np.where(df['C'] == 1, 'C', False)
df['flag'] = np.where(df['D'] == 1, 'D', False)
我也尝试过迭代地循环每个“类别”并分配一个标志值,但是在这些情况下它也会覆盖。
如果有一种方法可以让我迭代地做到这一点,那将是理想的。但是,对于这个(简单)问题的任何帮助将不胜感激!
解决方案
我们可以idxmax
在axis=1
这里使用:
df['flag'] = df.loc[:, 'A':'D'].idxmax(axis=1)
A B C D flag
0 1 0 0 0 A
1 0 1 0 0 B
2 1 0 0 0 A
3 0 0 1 0 C
4 0 1 0 0 B
推荐阅读
- javascript - Vue在一个页面上存储一个变量并在另一个页面上调用
- python - 两个数字之间的日期时间和 Sqllite 问题
- django - 为什么我不能访问我的 Django 模型实例的子类类型?
- circleci - CircleCI 使用带参数的 Sed
- delphi - 缓冲区安全检查(堆栈 Cookie)
- django - 如何在将密码保存到用户模型 Django 之前对其进行加密?
- reactjs - 与匿名子组件通信状态
- javascript - 为什么我的代码在里面执行了两次随机函数?
- python - 如果我们通常应该平均梯度(而不是损失),为什么我们要平均批次中所有元素的损失?
- spring-boot - 从 Keycloak 验证令牌