ディーンパワー:
私は、データフレームを持っています:
df = pd.DataFrame([[1, 2], [1, 3], [4, 6]], columns=['A', 'B'])
A B
0 1 2
1 1 3
2 4 6
私は、データフレーム戻りたい、同じサイズの各列の平均値を含むを:
A B
0 2 3.666
1 2 3.666
2 2 3.666
これを行う簡単な方法はありますか?
ALollz:
データフレームを再作成します。辞書に平均シリーズを送信し、その後、インデックスが行数を定義します。
pd.DataFrame(df.mean().to_dict(), index=df.index)
# A B
#0 2.0 3.666667
#1 2.0 3.666667
#2 2.0 3.666667
同じ概念が、完全な配列を作成することは初めてのまともな量を節約できます。
pd.DataFrame(np.broadcast_to(df.mean(), df.shape),
index=df.index,
columns=df.columns)
ここではいくつかのタイミングです。もちろんこれは、列の数に多少依存しますが、あなたはあなたが開始する配列全体を提供し、かなり大きな違いがある見ることができます
import perfplot
import pandas as pd
import numpy as np
perfplot.show(
setup=lambda N: pd.DataFrame(np.random.randint(1,100, (N, 5)),
columns=[str(x) for x in range(5)]),
kernels=[
lambda df: pd.DataFrame(np.broadcast_to(df.mean(), df.shape), index=df.index, columns=df.columns),
lambda df: df.assign(**df.mean()),
lambda df: pd.DataFrame(df.mean().to_dict(), index=df.index)
],
labels=['numpy broadcast', 'assign', 'dict'],
n_range=[2 ** k for k in range(1, 22)],
equality_check=np.allclose,
xlabel="Len(df)"
)