【问题标题】:multiple conditions on dataframes数据帧上的多个条件
【发布时间】:2018-03-27 13:04:22
【问题描述】:

我正在尝试编写一个新列 'is_good',如果 'value' 列中的数据集在 范围 1 到 6 之间并且当 'value2' 列在 范围 5 到 10 如果它们不满足两个条件,则标记为 0

我知道如果你这样做,

df['is_good'] = [1 if (x >= 1 and x <= 6) else 0 for x in df['value']]

它会根据值的范围填写 1 或 0,但在标记 1 或 0 时我如何考虑 value2 的范围。

无论如何我可以在没有 numpy 的情况下实现这一目标吗?

提前感谢您!

【问题讨论】:

  • 如果答案解决了您的问题,请不要忘记将答案标记为解决方案

标签: python pandas dataframe


【解决方案1】:

我认为需要双 between& 的链条件(按位与):

df = pd.DataFrame({'value':range(13),'value2':range(13)})
df['is_good'] =  (df['value'].between(1,6) & df['value2'].between(5,10)).astype(int)

或者使用4个条件:

df['is_good'] =  ((df['value'] >= 1) & (df['value'] <= 6) & 
                   (df['value2'] >= 5) & (df['value'] <= 10)).astype(int) 


print (df)
    value  value2  is_good
0       0       0        0
1       1       1        0
2       2       2        0
3       3       3        0
4       4       4        0
5       5       5        1
6       6       6        1
7       7       7        0
8       8       8        0
9       9       9        0
10     10      10        0
11     11      11        0
12     12      12        0

【讨论】:

  • 不只考虑值列我还需要同时检查值2列的范围
【解决方案2】:

一个更短的选择:

In [47]: df['is_good'] = df.eval("1<=value<=6 & 5<=value2<=10").astype(np.int8)

In [48]: df
Out[48]:
    value  value2  is_good
0       0       0        0
1       1       1        0
2       2       2        0
3       3       3        0
4       4       4        0
5       5       5        1
6       6       6        1
7       7       7        0
8       8       8        0
9       9       9        0
10     10      10        0
11     11      11        0
12     12      12        0

【讨论】:

    猜你喜欢
    • 2015-02-27
    • 2023-03-17
    • 2021-04-18
    • 1970-01-01
    • 2018-08-24
    • 2018-12-07
    • 2019-05-18
    • 2018-04-05
    • 2018-05-30
    相关资源
    最近更新 更多