如何以一种泛式的方式实现二元产品

2024-05-14 16:56:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

df    
    A   B
0   2.5 0.1
1   NaN 0.5
2   NaN 0.3
3   2.0 0.1

我想把A中的每个非值乘以B列。 这可以通过使用

^{pr2}$

并返回向量的并矢积

array([[ 0.25,  1.25,  0.75,  0.25],
       [  nan,   nan,   nan,   nan],
       [  nan,   nan,   nan,   nan],
       [ 0.2 ,  1.  ,  0.6 ,  0.2 ]])

有没有可能直接从pandas构建这样的数据帧?在

这个问题的背景:在groupby之后,每个组都由一个具有上述结构的DataFrame组成。中始终至少有一个非nan项,但可能有多个。我想建立一个新的列作为(non nan(a)*(B))向量的平均值(如果你愿意,这是某种插补,考虑到a值的不安全性) 只需

np.nanmean(dyadic, axis=0)
array([ 0.225,  1.125,  0.675,  0.225])

或者说,numpy是这里最优雅的解决方案吗?在


Tags: 数据dataframepandasdfnan结构array向量
2条回答

单程

pd.DataFrame(columns=df.B,index=df.A).apply(lambda x : x.name*x.index)
Out[93]: 
B      0.1   0.5   0.3   0.1
A                           
 2.5  0.25  1.25  0.75  0.25
NaN    NaN   NaN   NaN   NaN
NaN    NaN   NaN   NaN   NaN
 2.0  0.20  1.00  0.60  0.20

另一种方法(应该比apply快)

^{pr2}$

也就是dot产品。在

i = df[['A']].values
j = df[['B']].values.T

^{pr2}$

如果希望结果为数据帧,请执行以下操作-

^{3}$

或者

df[['A']].dot(df['B'].values[None, :])  # thanks to Zero for the alt

      0     1     2     3
0  0.25  1.25  0.75  0.25
1   NaN   NaN   NaN   NaN
2   NaN   NaN   NaN   NaN
3  0.20  1.00  0.60  0.20

然后您可以对结果调用meannanmean

df[['A']].dot(df[['B']].values.T).mean(0)

0    0.225
1    1.125
2    0.675
3    0.225
dtype: float64 

相关问题 更多 >

    热门问题