看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
当你需要从数据集中选择包含特定数字的行时,可以使用该操作。例如,你可能只对某个特定数值感兴趣,或者想要排除某些数值。在本例中,我们来看看 pandas 如何操作。
我们构造数据如下:
import pandas as pd
df = pd.DataFrame({'A': [*'1122'], 'B': '2 13 21 123'.split()})
df = df.astype(int)
df
'''
A B
0 1 2
1 1 13
2 2 21
3 2 123
'''
我们需要增加 C 列,如果 A 列的数字在 B 列中,那么显示为 Y,否则显示为 N。
由于数字无法判断是否包含,我们将数据转为字符串,字符串是一个序列,可以进行成员检测(in
)操作,然后按行进行检测,就得到每行的布尔值,最终形成一个布尔序列。
最后,用 map 方法对这个布尔序列进行映射,转为 Y 和 N 值。
根据思路,先转数据为字符串,然后按行进行成员检测:
(
df.astype(str)
.apply(lambda x: x.A in x.B, axis=1)
)
'''
0 False
1 True
2 True
3 True
dtype: bool
'''
最后用 map 对布尔值进行映射。为了方便操作,将结果赋值:
c = (
df.astype(str)
.apply(lambda x: x.A in x.B, axis=1)
.map({True: 'Y', False: 'N'})
)
c
'''
0 N
1 Y
2 Y
3 Y
dtype: object
'''
将最终结果指定到新列:
df.assign(C=c)
'''
A B C
0 1 2 N
1 1 13 Y
2 2 21 Y
3 2 123 Y
'''
这样就得到了最终的结果。
(完)
更新时间:2024-08-18 16:17:21 标签:pandas python 数字