假设我有一个pandas数据框,其中2列由字符串列表组成,如下所示
df=pd.DataFrame( {'A' : [ ['a','b','c'], ['d','e','f'] ], 'B':[ ['g','h','i'], ['j','k','l'] ] })
我想用连字号将A中第一个列表中的第一个字符串元素与B中第一个列表中的第一个字符串元素连接起来。最终产品将是另一列C,因此
df['C'] = [ ['a-g','b-h','c-i'], ['d-j','e-k','f-l' ] ]
我尝试了apply()和map()的不同功能,但没有任何东西产生期望的结果,感谢您的帮助。
我会用apply
+来做到这一点np.core.defchararray.add
:
from numpy.core.defchararray import add
df['C'] = df[['A', 'B']].apply(lambda x: add(add(x.A, '-'), x.B).tolist(), 1)
df
A B C
0 [a, b, c] [g, h, i] [a-g, b-h, c-i]
1 [d, e, f] [j, k, l] [d-j, e-k, f-l]
只要记住我说过的关于在列表中存储数据的内容即可。
如果您的列大小可能不相等,则可以进行if
检查:
def foo(x):
if len(x.A) == len(x.B):
return add(add(x.A, '-'), x.B).tolist()
return []
df['C'] = df[['A', 'B']].apply(foo, 1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句