考虑数据框 df
df = pd.DataFrame(np.random.rand(5, 3),
['p0', 'p1', 'p2', 'p3', 'p4'],
['A', 'B', 'C'])
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 repeat
和numpy.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:
为创造新的另一种解决方案df
有numpy.tile
:
dm2 = pd.DataFrame(np.tile(dm.values[:, None], (1, df.shape[1])), dm.index, df.columns)
df.append(dm2)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句