我试图通过应用一个函数来创建/修改一列,该函数处理一列或两列中的字符串
举一个具体的例子,我有以下数据框架和函数:
def get_sign(number:str, name:str) -> str:
"""Function to apply on two columns to produce another one"""
if number.startswith("-"):
return "Negative-" + name[0]
else:
return "Positive-" + name[0]
df = pd.DataFrame({'name': ["John", "Jack", "Jeff", "Kate"], "number":["123_456", "-123", "+456", "-0"], "age": [10, 20, 30, 36]})
我正在尝试获取此数据帧:
name number age sign
0 John 123_456 10 Positive-J
1 Jack -123 20 Negative-J
2 Jeff +456 30 Positive-J
3 Kate -0 36 Negative-K
我尝试使用assign
将序列转换为“字符串”,但出现以下错误:
df.assign(sign=lambda x:get_sign(x["number"].str, x["name"].str))
<ipython-input-64-e72c1bf8f4bf> in <lambda>(x)
7
8 df = pd.DataFrame({'name': ["John", "Jack", "Jeff", "Kate"], "number":["123_456", "-123", "+456", "-0"], "age": [10, 20, 30, 36]})
----> 9 df.assign(sign=lambda x:get_sign(x["number"].str, x["name"].str))
10 df["sign"] = pd.Series([get_sign(el) for el in df["number"]])
11 df
...
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我怎样才能做到呢?谢谢
我不知道这是否是最佳解决方案,但这可能有效
Series
这导致了这样一行代码:
对于您的功能,您可以尝试:
请注意,您也可以对函数进行矢量化,这样您就不需要
apply
这是一个缓慢的过程:相关问题 更多 >
编程相关推荐