当前位置: 首页 > 知识库问答 >
问题:

根据两个条件设置列值[重复]

方建明
2023-03-14

我有一个熊猫数据框。如果以前的值x小于50,而当前值大于50,我想为新列y添加一个值为1的新列。

我得到这个错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

代码:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(40,60,size=(10, 1)), columns=['x'])

df['y'] = 1 if (df['x'].shift(1) < 50) and (df['x'] > 50) else 0

共有2个答案

华景同
2023-03-14

是Python类不能覆盖的运算符。它接受两个表达式作为输入。它评估第一个。如果第一个值的真实性为True,则它会计算后者并返回该结果。如果thruthity为False,则返回前一个表达式的结果。

这里可以使用的是布尔运算符

df['y'] = ((df['x'].shift(1) < 50) & (df['x'] > 50)).astype(int)

这里我们使用astype将布尔值行转换为整数行False映射到0True映射到1

李星波
2023-03-14

这是一个古老的故事。熊猫为您提供了一个重载版本的按位运算符,您应该将其用于矢量化或/与操作。无论如何,基于您的代码,在这里进行astype转换会更合适。

In [139]: df['y'] = ((df['x'].shift(1) < 50) & (df['x'] > 50)).astype(np.int8)

In [140]: df
Out[140]:
    x  y
0  51  0
1  51  0
2  48  0
3  54  1
4  47  0
5  41  0
6  51  1
7  49  0
8  53  1
9  41  0

或不太常见的选项:

In [146]: df.eval("(x.shift() < 50 and x > 50) * 1", inplace=False, engine='python')
Out[146]:
0    0
1    0
2    0
3    1
4    0
5    0
6    1
7    0
8    1
9    0
Name: x, dtype: int32
 类似资料:
  • 我得到了这个数据帧,我想根据一些列名分配一个值。像这样。loc[df['max_speed']==1,df['shield']==2,new]=10然后我将获得新的数据帧: 有人知道怎么做吗?

  • 问题内容: 这个问题已经在这里有了答案 : SQL UPDATE SET哪一列等于另一列引用的相关表中的值? (10个答案) 7年前关闭。 我有两张桌子 table1(id,item,price)值: .... table2(id,item,price)值: 现在我要: 我该怎么做? 问题答案: 这样的事情应该做到: 您也可以尝试以下操作:

  • 我有一个数据集 是否有任何方法可以确保,如果不同的的下一个值小于中的值,那么它应该在 列中执行加法。 下面是我期待的结果 所以基本上我寻求一个解决方案,对于每个唯一的< code>field_pointpath,如果它遇到一个小于前一个值的值,那么它应该将前一个值与下一个值相加。 if <代码>值[i 1]

  • 我必须解决这个问题:目标:删除大多数行缺少输入的列:1。数据帧df:数据帧2。阈值:确定将删除哪些列。如果阈值为.9,则缺少90%值的列将被丢弃:1。带删除列的数据帧df(如果未删除任何列,则返回相同的数据帧) Excel文档截图 我编码了这个: 我必须有“自我、博士和阈值”,不能添加更多。代码必须通过下面的测试用例: 当我运行VT.drop_nan_col(df,0.9). head()时,我不

  • 我有这样的表: 我需要一个更新查询来根据它包含的值更新salary列。 工资需要增加: 10000到15000之间的值为5000 15000到20000之间的值为7000 20000到30000之间的值为8000 40000到60000之间的值为10000

  • 问题内容: 我有这张桌子,我想用SELECT来排除标记的行。一般规则是: 如果有两行或更多行,控件名与品牌名与组类型列相等 然后保留组名不是“ Keine Zuordnung”的行。 请给我一点帮助吗?谢谢! 问题答案: 这是一种方法: 它使用窗口函数来获取计数,然后使用a进行逻辑计算。