我有以下数据框:
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])
我能得到任何建议吗?
答案 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']