如何从没有lambda的另一列中的列表元素添加Pandas dataframe列?

时间:2016-10-06 02:59:10

标签: python pandas

假设我有这个数据框

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)

2 个答案:

答案 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"