假设我有这个数据框
A B
[ 'a' , 'b' , 'c' ] 3
[ 'e' , 'f' , 'g' , 'h'] 5
如何在没有lambda的情况下创建如下所示的新列?
A B C
[ 'a' , 'b' , 'c' ] 3 'b'
[ 'e' , 'f' , 'g' , 'h' ] 5 'g'
如果使用lambda,它将是
df['C'] = df['A'].apply( lambda x : x[-2] )
编辑: 示例代码:
import pandas as pd
mydata = [ { 'A' : [ 'a' , 'b' , 'c' ] , 'B' : 3 } ,
{ 'A' : [ 'e' , 'f' , 'g' , 'h' ] , 'B' : 5}]
df = pd.DataFrame(mydata)
答案 0 :(得分:0)
您可以将lambda定义为常规函数,并使用apply来调用它:
def my_function(x):
return x[-2]
df['C'] = df['A'].apply(my_function)
答案 1 :(得分:0)
解决方案是使用>>> import re
>>> def add_brackets(s):
... return re.sub(r'\b([A-Z]+)\b', r'(\1)', s)
...
>>> print(add_brackets(text))
Agnico Eagle Mines Limited (AEM)
从列表中索引,但它需要字符串长度是统一的。您还可以使用Bob提出的列表理解,这是最强大的解决方案。
str
这是一个正则表达式解决方案,因为这可能对列表中不同的字符串长度和类型更加健壮。如果实际列表元素更复杂,请替换In [110]: df.A.str.join(',').str[-3]
Out[110]:
0 b
1 g
Name: A, dtype: object
。
"\w"