目前还不清楚你想达到什么样的,但我怀疑你需要创建单独的dataframes。
下面的示例显示了如何获取数据框,将其子集合到您感兴趣的列,将函数foo
应用于其中一列,然后应用返回多个值的第二个函数bar
。
df = pd.DataFrame({
'first_name': ['john', 'nancy', 'jolly'],
'last_name': ['smith', 'drew', 'rogers'],
'A': [1, 4, 7],
'B': [2, 5, 8],
'C': [3, 6, 9]
})
>>> df
first_name last_name A B C
0 john smith 1 2 3
1 nancy drew 4 5 6
2 jolly rogers 7 8 9
def foo(first_name):
return 2 if first_name.startswith('j') else 1
def bar(first_name):
return (2, 0) if first_name.startswith('j') else (1, 3)
columns_of_interest = ['first_name', 'A']
df_new = pd.concat([
df[columns_of_interest].assign(x=df.first_name.apply(foo)),
df.first_name.apply(bar).apply(pd.Series)], axis=1)
>>> df_new
first_name A x 0 1
0 john 1 2 2 0
1 nancy 4 1 1 3
2 jolly 7 2 2 0
为什么你需要返回一个数据框,如果你只是在最后连接它们?在你的问题中没有什么解释为什么这个“要求”是相关的。事实上,如果您正在考虑行而不是列,那么您可能无效地处理数据。 – Alexander
...你试过'pd.DataFrame.apply'方法吗?它似乎*完全*你想要的。 –
@亚历山大我其实确实需要这个要求。 考虑这个炮制的例子:数据表中的每一行都是一个人的名字。要应用于每行的函数将采用该名称,并且通过任何逻辑(引用外部对象/数据帧)将返回与该名称关联的5个数字特征。现在我非常需要这个名称和它的5个特征,以DataFrame格式,即5行,2列:名称|特征 对于所有行也是如此。 –