求助: Pandas 添加列,并根据其他列的值判断之后返回结果

2017-01-13 13:46:03 +08:00
 zvDC

请教 pandas 问题

测试数据如下:

df
    name    type    number
0   David   A       1234
1   Tom    B       2233
2   Jack    C       2244
3   Allen    B       2355      

想在 df 后面插入一列,叫 df=['is_valid']

此栏中的值主要用于判断对应行中各列数据的有效性:比如长度,是否为空值,或值是否为限定允许的值 只要有一列的判断结果为 False ,is_valid 就为 Fals

有效条件依次为:

想法是,一列一列地判断,根据判断结果对 is_valid 栏的值进行修订 ( True or False )

先用空值填充

df['is_valid'] = ''

判断 name 列值是否为空

df['is_valid'] = df.name.notnull()

此时查看 df['is_valid'] 值,大致为:

df['is_valid']

0       True
1       True
2      False  (name 中值为空)
3       True

问题如下:

1 、如何让判断第二列的时候,当判断的结果为 False 时才会更新 is_valid 的值

2 、如何判断 第二列 type 值在限定范围内,问号处怎么处理? df['is_valid'] = df.type.?

谢谢!

7554 次点击
所在节点    Python
8 条回复
zvDC
2017-01-13 13:46:52 +08:00
困扰半天了,向各位大侠求助,先谢谢啦。
zvDC
2017-01-13 13:52:51 +08:00
哦,测试数据中 name 列第三个值,应该为空的,不好意思。
bigtan
2017-01-13 14:03:04 +08:00
![QQ 截图 20170113140200.png]( https://ooo.0o0.ooo/2017/01/13/58786d8676c8d.png)
bigtan
2017-01-13 14:04:50 +08:00
你那个 name 的判断我没太看明白,大概是这个套路,你琢磨一下
bigtan
2017-01-13 14:05:54 +08:00
![QQ 截图 20170113140529.png]( https://ooo.0o0.ooo/2017/01/13/58786e3837401.png)
bigtan
2017-01-13 14:06:44 +08:00
看下面这个吧,大概是这么个套路,上面少些了一个判断,不明白你可以加我 qq ,我教你
ruoyu0088
2017-01-13 19:38:24 +08:00
zvDC
2017-01-14 12:25:00 +08:00
@bigtan @ruoyu0088 谢谢两位热心帮助

最后用了 逻辑与判断来处理了

```
df['is_valid'] = df.name.notnull() & df.type.isin(['A', 'B', 'C', 'D']) & (df.number.str.len() == 4)
```

注意最后一个 条件,一定要括在括号里,运算符的优先级问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/334348

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX