我很好奇是否可以将多个函数应用于单个 pandas 数据框列。例如,假设我有三个函数:
在:
def foo(col):
if 'hi' in col:
return 'TRUE'
def bar(col):
if 'bye' in col:
return 'TRUE'
def baz(col):
if 'ok' in col:
return 'TRUE'
以及以下数据框:
dfs = pd.DataFrame({'col':['The quick hi brown fox hi jumps over the lazy dog',
'The quick hi brown fox bye jumps over the lazy dog',
'The NO quick brown fox ok jumps bye over the lazy dog']})
如果我想将每个函数应用到 col
,通常我会使用 pandas apply功能:
dfs['new_col1'] = dfs['col'].apply(foo)
dfs['new_col2'] = dfs['col'].apply(bar)
dfs['new_col3'] = dfs['col'].apply(baz)
dfs
输出:
col new_col1 new_col2 new_col3
0 The quick hi brown fox hi jumps over the lazy dog TRUE None None
1 The quick hi brown fox bye jumps over the lazy... TRUE TRUE None
2 The NO quick brown fox ok jumps bye over the l... None TRUE TRUE
但是,如您所见,我创建了 3 列。因此,我的问题是如何在大型数据帧中将上述 3 个函数同时有效地应用于特定列?,预期结果应该是:
col new_col
0 The quick hi brown fox hi jumps over the lazy dog TRUE
1 The quick hi brown fox bye jumps over the lazy... TRUE, TRUE
2 The NO quick brown fox ok jumps bye over the l... TRUE, TRUE
请注意,我知道我可以将 3 列合并为一列。不过,我想知道上述问题是否可能。
最佳答案
为什么不将所有功能集中到一个巨大的功能中呢?
def oneGaintFunc(col):
def foo(col):
if 'hi' in col:
return 'TRUE'
def bar(col):
if 'bye' in col:
return 'TRUE'
def baz(col):
if 'ok' in col:
return 'TRUE'
a = foo(col)
b = bar(col)
c = baz(col)
return '{} {} {}'.format(a, b, c)
df['new_col'] = df['col'].apply(oneGiantFunc)
关于python - 如何将多个函数应用于单个 pandas 数据框列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42369953/