我有以下数据框:
p p_loc s s0 s0_loc s1 s1_loc s2 s2_loc s3 s3_loc
0 ABCD M AB,AC,AD AB A AC M AD Q NaN U
1 PQRS N PQ,PR,PS,QR PQ B PR N PS R QR V
我正在使用as作为分隔符将列s分成s0,s1,s2,s3列。 我想将值从s0,s1,s2,s3,s4,s5,s0_loc,s1_loc,s2_loc,s3_loc传递给以下接受以下参数的函数:
def func(p,p_loc,**args):
print(p)
print(p_loc)
print(kwargs)
我传递的论点如下:
df['new'] = df.apply(lambda x: func(df['p'],df['p_loc'],df['s0'],df['s1'],df['s2'],df['s3'],df['s0_loc'],df['s1_loc'],df['s2_loc'],df['s3_loc']))
我想知道有没有更简单的方法来传递这些参数(比如说,假设我的列s的拆分导致超过15-20列。我怎样才能以更简单的方式传递这些参数)... ???
提前致谢...
答案 0 :(得分:2)
创建set
位置参数,例如:
>>> not_kwargs = {'p', 'p_loc', 's'}
接下来过滤掉像:
这样的kwargs>>> data = df.to_dict()
>>> kwargs = {key:data[key] for key in data.keys() ^ not_kwargs}
如果您使用的是python-2.7,则^
仅适用于set
。
>>> kwargs = {key:data[key] for key in set(data.keys()) ^ not_kwargs}
通话功能:
>>> func(data['p'], data['p_loc'], **kwargs)
答案 1 :(得分:1)
不确定这是否是您想要的,但您可以将所需的列放在单独的列表中,并在需要时生成参数。
def func(p, p_loc, *args):
print(p)
print(p_loc)
print(args)
list_of_cols = ['s0', 's1', 's2', 's3', 's0_loc', 's1_loc', 's2_loc','s3_loc']
df['new'] = df.apply(lambda x: func(df['p'], df['p_loc'], *[df[col] for col in list_of_cols]))
答案 2 :(得分:1)
这是你要找的吗?
你可以将dict传递给这样的kwargs:
d = {
'p': df['p'],
'p_loc': df['p_loc'],
's0': df['s0'],
's1': df['s1'],
...
}
def func(**kwargs):
print(kwargs)
func(**d)