将列作为参数动态传递给pandas中具有列表推导的函数

时间:2018-01-31 13:22:51

标签: python pandas dataframe

我有以下数据框:

p     s
ABCD  AB,AC,AD
XY    XY   
MSD   MS,MD
PQRS  PQ,PR,PS

我使用以下语法将列s拆分为s0,s1,s2 ....

df = df.join(df['s'].str.split(',', expand=True).add_prefix('s').fillna(np.nan))

哪个wull导致

p     s         s0    s1    s2
ABCD  AB,AC,AD  AB    AC    AD 
XY    XY        XY    NaN   NaN
MSD   MS,MD     MS    MD    NaN
PQRS  PQ,PR,PS  PQ    PR    PS

现在我想将这些新生成的列值与其他一些列值一起传递给函数。 对于Eg:

def compare(p,s0,s1,s2):
    //piece of code

假设生成的列数(假设一次13,表示s0,s1,s2,... s12和另一个时间15,s0,s1,...,s13)从数据集到数据集不等(取决于数字)列中的字段以逗号分隔)。有没有办法让我可以根据创建的列数动态传递这些列值?

如下: def compare(p,[list comrehension])

我能得到任何建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Index.difference方法生成新列的列表:

new_columns = df.columns.difference(old_columns).tolist()

例如,

import numpy as np
import pandas as pd

def compare(p, new_columns):
    print(new_columns)

df = pd.DataFrame({'p': ['ABCD', 'XY', 'MSD', 'PQRS'],
                   's': ['AB,AC,AD', 'XY', 'MS,MD', 'PQ,PR,PS']})

old_columns = df.columns
df = df.join(df['s'].str.split(',', expand=True).add_prefix('s').fillna(np.nan))
new_columns = df.columns.difference(old_columns).tolist()

compare(df['p'], new_columns)

打印

['s0', 's1', 's2']