その列の平均値でパンダのデータフレームの列を交換してください

ディーンパワー:

私は、データフレームを持っています:

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)"
)

ここでは、画像の説明を入力します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=365316&siteId=1