Python 在考虑条件的情况下创建新列
我试图根据一个条件创建一个新列,其思想是,如果第一列的值为0,则取第二列,如果没有,则离开第一列Python 在考虑条件的情况下创建新列,python,pandas,dataframe,Python,Pandas,Dataframe,我试图根据一个条件创建一个新列,其思想是,如果第一列的值为0,则取第二列,如果没有,则离开第一列 df1 = pd.DataFrame({ 'Buyer': ['Carl', 'Carl', 'Carl'], 'Quantity': [18, 0, 5], 'Hoja':[2,4,8], 'Salida':[0,0,0]}) def remean_points(row): if df1.Quantity==0: row.Salida = Quantity els
df1 = pd.DataFrame({
'Buyer': ['Carl', 'Carl', 'Carl'],
'Quantity': [18, 0, 5],
'Hoja':[2,4,8],
'Salida':[0,0,0]})
def remean_points(row):
if df1.Quantity==0:
row.Salida = Quantity
else:
df1.Salida= row.Hoja
return row
df1.apply(remean_points, axis='columns')
但是我发现下面的错误,我不知道如何解决它,我感谢你的帮助
ValueError Traceback (most recent call last)
<ipython-input-20-7c3222c7a9a8> in <module>
6 return row
7
----> 8 df1.apply(remean_points, axis='columns')
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, raw, result_type, args, **kwds)
6876 kwds=kwds,
6877 )
-> 6878 return op.get_result()
6879
6880 def applymap(self, func) -> "DataFrame":
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\apply.py in get_result(self)
184 return self.apply_raw()
185
--> 186 return self.apply_standard()
187
188 def apply_empty_result(self):
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\apply.py in apply_standard(self)
294 try:
295 result = libreduction.compute_reduction(
--> 296 values, self.f, axis=self.axis, dummy=dummy, labels=labels
297 )
298 except ValueError as err:
pandas\_libs\reduction.pyx in pandas._libs.reduction.compute_reduction()
pandas\_libs\reduction.pyx in pandas._libs.reduction.Reducer.get_result()
<ipython-input-20-7c3222c7a9a8> in remean_points(row)
1 def remean_points(row):
----> 2 if df1.Quantity==0:
3 row.Salida = Quantity
4 else:
5 df1.Salida= row.Hoja
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
1477 def __nonzero__(self):
1478 raise ValueError(
-> 1479 f"The truth value of a {type(self).__name__} is ambiguous. "
1480 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
1481 )
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
ValueError回溯(最近一次调用)
在里面
6返回行
7.
---->8 df1.应用(重新定义点,轴=列)
C:\ProgramData\Anaconda3\lib\site packages\pandas\core\frame.py在应用中(self、func、axis、raw、result\u type、args、**kwds)
6876科威特第纳尔=科威特第纳尔,
6877 )
->6878返回操作获取结果()
6879
6880 def applymap(self,func)->“数据帧”:
获取结果(self)中的C:\ProgramData\Anaconda3\lib\site packages\pandas\core\apply.py
184返回self.apply_raw()
185
-->186返回自我。应用_标准()
187
188 def应用\空\结果(自身):
C:\ProgramData\Anaconda3\lib\site packages\pandas\core\apply.py在apply\u标准(self)中
294试试:
295结果=libreduce.compute\u reduce(
-->296个值,self.f,轴=self.axis,虚拟=虚拟,标签=标签
297 )
298除ValueError作为错误外:
熊猫\\u libs\reduce.pyx在熊猫中。_libs.reduce.compute\u reduce()
pandas\\ libs\reduce.pyx在pandas中。\ libs.reduce.Reducer.get\ u result()
在remean_点(世界其他地区)
1个定义点(世界其他地区):
---->2如果df1.数量==0:
3行Salida=数量
4其他:
5 df1.Salida=霍亚区
C:\ProgramData\Anaconda3\lib\site packages\pandas\core\generic.py in\uuuuuuuu nonzero\uuuuuuuuu(self)
1477定义非零(自):
1478升值错误(
->1479F“一个{type(self)。{name}的真值是不明确的。”
1480“使用a.empty、a.bool()、a.item()、a.any()或a.all()
1481 )
ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
您的错误消息是抱怨序列的真值不明确,这意味着您有一个充满布尔值的序列对象,而if不知道如何处理它。它需要一个布尔值
之所以会出现这种情况,是因为这一行如果df1.Quantity==0:
,则会询问列的每个值是否等于零,这就是为什么会有布尔级数。我的猜测是,您试图只检查函数接收到的特定行的值Quantity
,因此您应该为该行更改df1
如果我正确理解了您的目标,这就是您想要的函数和函数调用:
df1 = pd.DataFrame({
'Buyer': ['Carl', 'Carl', 'Carl'],
'Quantity': [18, 0, 5],
'Hoja':[2,4,8],
'Salida':[0,0,0]})
def remean_points(row):
if row.Quantity==0:
return row.Quantity
else:
return row.Hoja
df1["Salida"] = df1.apply(remean_points, axis ="columns")
PS:如果您确实希望以这种方式使用df1,我建议您也将其作为函数的参数传递,以避免以后出现令人讨厌的副作用