python - 熊猫:如何根据满足特定条件的其他两列添加一列
问题描述
我有这些数据,其中有一列表示颜色,另一列表示字母。如果颜色和字母“属于”在一起,则数据正确,因此新列应显示 C。否则,应显示 I。
我是这样做的,但问题是,这只会将所有正确的放在顶部,将不正确的放在底部:
#correct
c1 = df['color'].eq('green') & df['value'].eq('V')
c2 = df['color'].eq('blue') & df['value'].eq('A')
c3 = df['color'].eq('red') & df['value'].eq('R')
m = c1 | c2 | c3
correct_df = df.loc[m, ['Person ID','word', 'rt', 'color']]
correct_df['accuracy'] = 'C'
incorrect_df = df.loc[~m, ['word', 'rt', 'color']]
incorrect_df['accuracy'] = 'I'
df_cor_inc = correct_df.append([incorrect_df])
我需要的是把另一列添加到一边,并说明响应是否正确,但按照数据已经存在的顺序。
这是一个数据样本:
Person ID value word color correct rt
0 R FLOWER red r 1223
0 B CAR blue b 33
1 G KNIFE blue b 333
1 R CAT red r 2332
2 B CHILD green g 232
这就是我希望它看起来的样子:
Person ID value word color correct rt accuracy
0 R FLOWER red r 1223 C
0 B CAR blue b 33 C
1 G KNIFE blue b 333 I
1 R CAT red r 2332 C
2 B CHILD green g 232 I
解决方案
重用你的布尔掩码m
,我们可以使用np.where()
如下:
df['accuracy'] = np.where(m, 'C', 'I')
np.where()
就像一个 if-then-else 语句。如果第一个参数的条件为True,则根据第二个参数设置值('C'
这里);否则,它将根据第三个参数('I'
此处)设置值。
结果:
print(df)
Person ID value word color correct rt accuracy
0 0 R FLOWER red r 1223 C
1 0 B CAR blue b 33 I
2 1 G KNIFE blue b 333 I
3 1 R CAT red r 2332 C
4 2 B CHILD green g 232 I
推荐阅读
- docker - 子目录中的 Dockerfile 导致构建上下文异常之外的禁止路径
- node.js - 如何在 NestJS 服务中测试猫鼬?
- python-3.x - 我无法连接两个用于 python 的 API
- javascript - 烧瓶 jinja2 模板中的内联 javascript 未显示在 firefox/chrome 调试器中
- c# - 如何在 C# 中以特定格式对字符串日期列表进行排序
- php - 获取与 Eloquent Builder 相关的第一个元素
- java - 我收到错误:使用 Kotlin 时,Apache Beam 中 MapElements 转换的“重载分辨率歧义”
- mysql - 仅在另一列具有不同值的情况下查找重复数据
- django - 是否可以在 django 2.2 中批量更新多对多关系?
- javascript - React Selectable Fast:如何从可选项目列表中设置和获取选中项目