大熊猫将相同系列附加到每列

海盗

考虑数据框 df

df = pd.DataFrame(np.random.rand(5, 3),
                  ['p0', 'p1', 'p2', 'p3', 'p4'],
                  ['A', 'B', 'C'])
df

df

以及每一行的均值:

dm = df.mean(1)
dm.index = ['m0', 'm1', 'm2', 'm3', 'm4']
dm

m0    0.352396
m1    0.606469
m2    0.643022
m3    0.560809
m4    0.776058
dtype: float64

如何将这一系列方法附加到的每一列df我希望结果看起来像:

在此处输入图片说明

而且,由于这将被大规模应用,因此时间至关重要。

我用来生成预期输出的是:

pd.concat([df, pd.DataFrame({c: dm for c, i in df.iteritems()})])

时间安排(小规模)

在此处输入图片说明

时间安排(大规模)

在此处输入图片说明

耶斯列尔

您可以使用double concat

print (pd.concat([dm] * df.shape[1], axis=1, keys=df.columns))
           A         B         C
m0  0.823788  0.823788  0.823788
m1  0.615354  0.615354  0.615354
m2  0.606740  0.606740  0.606740
m3  0.386629  0.386629  0.386629
m4  0.637147  0.637147  0.637147

print (pd.concat([df, pd.concat([dm] * df.shape[1], axis=1, keys=df.columns)]))
           A         B         C
p0  0.789966  0.699837  0.981560
p1  0.415609  0.469310  0.961144
p2  0.920938  0.476615  0.422665
p3  0.323782  0.805231  0.030874
p4  0.761674  0.361134  0.788632
m0  0.823788  0.823788  0.823788
m1  0.615354  0.615354  0.615354
m2  0.606740  0.606740  0.606740
m3  0.386629  0.386629  0.386629
m4  0.637147  0.637147  0.637147

要创建附加文件df,可以使用numpy repeatnumpy.newaxis

x = dm.values

print (pd.DataFrame(np.repeat(x[:, np.newaxis], df.shape[1], 1), 
                    columns=df.columns,
                    index=dm.index))
           A         B         C
m0  0.399837  0.399837  0.399837
m1  0.890191  0.890191  0.890191
m2  0.580747  0.580747  0.580747
m3  0.354032  0.354032  0.354032
m4  0.329108  0.329108  0.329108

print(pd.concat([df, pd.DataFrame(np.repeat(x[:, np.newaxis], df.shape[1], 1), 
                    columns=df.columns,
                    index=dm.index)]))

           A         B         C
p0  0.087337  0.375891  0.736282
p1  0.777897  0.932047  0.960629
p2  0.945546  0.062647  0.734047
p3  0.247740  0.582076  0.232282
p4  0.078683  0.869736  0.038905
m0  0.399837  0.399837  0.399837
m1  0.890191  0.890191  0.890191
m2  0.580747  0.580747  0.580747
m3  0.354032  0.354032  0.354032
m4  0.329108  0.329108  0.329108    

编辑1:

为创造新的另一种解决方案dfnumpy.tile

dm2 = pd.DataFrame(np.tile(dm.values[:, None], (1, df.shape[1])), dm.index, df.columns)
df.append(dm2)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章