python - pandas 通过检查列表创建一个新列
问题描述
我有一个包含 4 列 A、B、C、D 和一个列表的数据框。我需要使用 B、C、D 列和列表创建列,如下面的输出部分所示。
hier_List= [[pages2 , book1 , paper3] , [pen1 , rifle2 , ink3] , [words1 ,book2, ink3]]
该列必须使用上述列表创建。
数据框:
A B C D
C_1 1971 book1 nan
C_1 1971 pages2 pages2
C_1 1970 book1 nan
C_1 1972 book1 nan
C_1 1973 letters4 nan
输出:
对于每一行,我应该检查 C 列值是否存在于 hier_list 的任何子列表中。如果存在则标志是,否则否。
A B C D is_present_any_list
C_1 1971 book1 nan yes
C_1 1971 pages2 pages2 yes
C_1 1970 book1 nan yes
C_1 1972 book1 nan yes
C_1 1973 letters4 nan no
我不知道该怎么做,请帮助我,如果您需要进一步说明,请告诉我。
解决方案
使用numpy.where
withisin
和扁平化嵌套列表 with numpy.concatenate
:
df['is_present_any_list'] = np.where(df['C'].isin(np.concatenate(hier_List)), 'yes', 'no')
print (df)
A B C D is_present_any_list
0 C_1 1971 book1 NaN yes
1 C_1 1971 pages2 pages2 yes
2 C_1 1970 book1 NaN yes
3 C_1 1972 book1 NaN yes
4 C_1 1973 letters4 NaN no
推荐阅读
- java - 如何在 JavaFX 运行时将字符编码设置为 UTF-8
- angular - 我有一个具有相同值的数组需要删除所有其他值
- database - Laravel 8 - 为什么不在视图中获取数据
- node.js - 如何在 Nuxt 应用中部署整个 Wordpress 应用?
- python - 在终端中运行 Python 文件 - 在 VSCode 中 - 在命令前加上与号“&” - 它是什么?
- c++ - 基于模板类型的无输入参数的“重载”功能
- django - Django中的异步视图
- java - 如何添加一个1射击婴儿小怪的结界?
- doxygen - 包含路径不包含文件夹
- mysql - 将 3 个 yii2 查询组合在一起时面临的问题