我有这样的代码:
import pandas as pd
zed = pd.DataFrame(data = {'a': [3, -5], 'b': [-4, 7]})
zed['c'] = zed['a'].astype(str) + ' ' + zed['b'].astype(str)这意味着:
a b c
0 3 -4 3 -4
1 -5 7 -5 7但我正在寻找列c:
a b c
0 3 -4 +3 -4
1 -5 7 -5 +7也就是说,正数应该有一个+前缀。
当我在任何地方添加if/else条件时,我的代码会变得非常混乱。我创建了以下函数:
def plus_prefix(a):
if a > 0:
b = '+' + a.astype(str)
else:
b = a.astype(str)
return b但是zed['c'] = plus_prefix(zed['a']) + ' ' + plus_prefix(zed['b'])抛出一个错误The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()。这又如何改善呢?如果我能够创建plus_prefix,以便在最后将其链接起来,zed['a'].plus_prefix()就太好了。
发布于 2022-02-17 16:53:36
可以使用apply()方法将函数应用于DataFrame (见文件):
zed['c'] = zed['a'].apply(plus_prefix) + ' ' + zed['b'].apply(plus_prefix)但是,由于您的值是整数,所以我得到了一个新的错误,因为它不知道astype()。在修改了您的函数之后,我能够让它开始工作:
import pandas as pd
def plus_prefix(a):
if a > 0:
b = '+' + str(a)
else:
b = str(a)
return b
zed = pd.DataFrame(data = {'a': [3, -5], 'b': [-4, 7]})
zed['c'] = zed['a'].apply(plus_prefix) + ' ' + zed['b'].apply(plus_prefix)发布于 2022-02-17 16:54:05
这应该能起作用:
zed['c'] = zed['a'].apply(lambda x: '{:+}'.format(x)) + ' ' + zed['b'].apply(lambda x: '{:+}'.format(x))Python >= 3.6
正如@Tomerikoo建议的那样,可以使用f-String简化代码:
zed['c'] = zed['a'].apply(lambda x: f'{x:+}') + ' ' + zed['b'].apply(lambda x: f'{x:+}')https://stackoverflow.com/questions/71162121
复制相似问题