Python 创建pandas数据帧的惯用方法,将另一个';s行

Python 创建pandas数据帧的惯用方法,将另一个';s行,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个数据帧 将熊猫作为pd导入 输入数据帧(dict(a=[1,2],b=[2,3])) 我还有一个函数f,它将每一行映射到另一个数据帧。下面是这样一个函数的示例。请注意,一般来说,函数可以采用任何形式,因此我不会寻找使用agg来重新实现下面的f的答案 def(行): 返回pd.DataFrame(dict(x=[行['a']*行['b'],行['a']+行['b']], y=[第['a']**2行,第['b']**2行]) 我想创建一个dataframe,它是应用于第一个dataf

假设我有一个数据帧

将熊猫作为pd导入
输入数据帧(dict(a=[1,2],b=[2,3]))
我还有一个函数
f
,它将每一行映射到另一个数据帧。下面是这样一个函数的示例。请注意,一般来说,函数可以采用任何形式,因此我不会寻找使用
agg
来重新实现下面的
f
的答案

def(行):
返回pd.DataFrame(dict(x=[行['a']*行['b'],行['a']+行['b']],
y=[第['a']**2行,第['b']**2行])
我想创建一个dataframe,它是应用于第一个dataframe的每一行的函数的串联。这样做的惯用方法是什么

output_df=pd.concat([f(行)代表_,input_df.iterrows()中的行)
我想我应该能够使用
apply
或类似的工具来实现这个目的,但似乎没有任何效果

   x  y
0  2  1
1  3  4
0  6  4
1  5  9

Yoy应该避免迭代行()

相反,请尝试:

df = df.assign(product=df.a*df.b, sum=df.sum(axis=1), 
    asq=df.a**2, bsq=df.b**2)
然后:

您可以使用来计算
sum
prod
和,/来计算sqaure

out = pd.DataFrame({'x': df.agg(['prod', 'sum'],axis=1).to_numpy().reshape(-1),
                    'y': np.square(df).to_numpy().reshape(-1)})
out

   x  y
0  2  1
1  3  4
2  6  4
3  5  9

谢谢你的回答。这看起来对更复杂的
f
不起作用。对于更一般的函数,有一种惯用的方法吗?我将在问题中澄清。谢谢你的回答。这看起来对更复杂的
f
不起作用。对于更一般的函数,有一种惯用的方法吗?我将在问题中澄清这是一个很好的答案,我已经看过了,它涵盖了很多有趣的话题。然而,主要关注点似乎是性能。很多人似乎对性能着迷。我认为编写简单易懂的惯用代码应该是首要目标。如果性能不可接受,则尽可能优化,但不应将其作为主要目标。然而,我想你是在指出,列表理解和pd.concat并没有那么糟糕,甚至可能是惯用的。谢谢。如果你想使用不同的和动态选择的函数,那么np.vectorize就是你的解决方案。在许多情况下,性能和可读性同样重要,如果它同样有效,为什么要选择较慢的选项呢?当你得到问题的答案时
out = pd.DataFrame({'x': df.agg(['prod', 'sum'],axis=1).to_numpy().reshape(-1),
                    'y': np.square(df).to_numpy().reshape(-1)})
out

   x  y
0  2  1
1  3  4
2  6  4
3  5  9