创建一个函数来提取特定列并重命名pandas

时间:2018-05-04 17:05:38

标签: python pandas numpy

我有一个目标表结构(3列)。我有多个来源,每个都有自己的细微差别,但最终我想用每个表来填充目标表(追加条目)

我想使用一个函数(我知道我可以在没有函数的情况下完成它但是从长远来看它可以帮助我使用函数)

我有以下源表

id col1 col2 col3 col4 
1   a    b    c    g
1   a    b    d    h
1   c    d    e    i

我想要这个最终结构

id num  group  
1   a    b    
1   a    b    
1   c    d  

所以我所做的就是从源表返回id,col1和col2(但请注意列名更改。对于不同的源表,它将是一组不同的3列,我将提取因此使用a功能)。

我正在使用的功能目前只返回1列(而不是3列)

定义功能:

def func(x, col1='id', col2='num', col3='group'):
    d=[{'id':x[col1], 'num':x[col2], 'group':x[col3]}]
    return pd.DataFrame(d)

将该函数应用于源表。

target= source.apply(func, axis=1)

2 个答案:

答案 0 :(得分:2)

这是编写此功能的灵活方法:

def func(dframe, **kwargs):
    keys = sorted(kwargs.keys(), key=lambda x: list(dframe).index(x))
    return dframe.filter(items=keys).rename(columns=kwargs)

func(df, id="id", col1="num", col2="group")

#    id num group
# 0   1   a     b
# 1   1   a     b
# 2   1   c     d

要确保新数据框保留原始列的顺序,您可以先对参数键进行排序:

  {

    "post_company_success_company_address_ibfk_1": [
        "123 Main Street N\/A Cincinnati Ohio 45500"
    ]
}

答案 1 :(得分:0)

你也可以这样做:

def func(df, *l):
    d = pd.DataFrame(df, columns=l)
    d.rename(columns={'col1':'num', 'col2':'group'}, inplace=True)
    return d

df2 = func(df, 'id','col1','col2')

print(df2)

   id num group
0   1   a     b
1   1   a     b
2   1   c     d