python - 根据数组的子集填充列
问题描述
我有一个这样的数据框
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
'A': [1, 2, 3, 2, 3, 1],
'B': [5, 2, 4, 1, 4, 5],
'C': list('abcdef')
}
)
和这样的数组
a = np.array([
[1, 5],
[3, 4]
])
我现在想添加一个附加列D
,df
其中包含"found"
基于A
和的值是否B
作为子集包含在a
.
一个简单的实现将是
for li in a.tolist():
m = (df['A'] == li[0]) & (df['B'] == li[1])
df.loc[m, 'D'] = "found"
这给出了预期的结果
A B C D
0 1 5 a found
1 2 2 b NaN
2 3 4 c found
3 2 1 d NaN
4 3 4 e found
5 1 5 f found
有没有避免循环的解决方案?
解决方案
一种选择是,我们可以使用合并indicator
out = df.merge(pd.DataFrame(a,columns=['A','B']),how='left',indicator="D")
out['D'] = np.where(out['D'].eq("both"),"Found","Not Found")
print(out)
A B C D
0 1 5 a Found
1 2 2 b Not Found
2 3 4 c Found
3 2 1 d Not Found
4 3 4 e Found
5 1 5 f Found
推荐阅读
- powerbi - 忽略视觉过滤器
- datatables - 用于 D-MMM-YY 排序的数据表和 Moment.js
- sql - 在 ssms 中插入突触 DW
- wpf - 有一个 App.xaml ResourceDictionary.MergedDictionaries 主题只影响某些控件 WPF
- excel - 在 Excel 中,可以编写哪个公式可以轻松识别我的输出条件是真还是假
- laravel - 如何在 laravel 7 中的 eloquent 模型后回显最后一个查询?
- python - 有没有办法按数据框的值对数据框进行分组?
- c# - 具有多级子级的实体框架核心父/子清理查询
- typescript - 使用 typescript-eslint 在 VSCode 编辑器中未显示 Typescript 错误
- c# - 比较对象与字典
> 考虑性能 c#