我有一个熊猫数据框。如果以前的值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
和
是Python类不能覆盖的运算符。它接受两个表达式作为输入。它评估第一个。如果第一个值的真实性为True
,则它会计算后者并返回该结果。如果thruthity为False
,则返回前一个表达式的结果。
这里可以使用的是布尔运算符
df['y'] = ((df['x'].shift(1) < 50) & (df['x'] > 50)).astype(int)
这里我们使用
astype
将布尔值行转换为整数行False
映射到0
,True
映射到1
。
这是一个古老的故事。熊猫为您提供了一个重载版本的按位运算符,您应该将其用于矢量化或/与操作。无论如何,基于您的代码,在这里进行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进行逻辑计算。