亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 Pandas 數據幀中的列替換為該列的平均值

將 Pandas 數據幀中的列替換為該列的平均值

阿晨1998 2022-09-13 19:59:46
我有一個數據幀:df = pd.DataFrame([[1, 2], [1, 3], [4, 6]], columns=['A', 'B'])   A  B0  1  21  1  32  4  6我想返回一個相同大小的數據幀,其中包含每列的平均值:   A      B0  2  3.6661  2  3.6662  2  3.666有沒有一種簡單的方法可以做到這一點?
查看完整描述

3 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

這是一個分配:


df.assign(**df.mean())


    A         B

0  2.0  3.666667

1  2.0  3.666667

2  2.0  3.666667


均值可通過以下公式輕松獲得:DataFrame.mean


df.mean()


tenor_yrs    14.292857

rates         2.622000

dtype: float64

綜上所述,我們可以使用字典解包將現有列替換為結果值。請注意,我們可以使用以下方法將 解壓縮到字典中:SeriesSeries**


{**df.mean()}

# {'tenor_yrs': 14.292857142857143, 'rates': 2.622}

假設添加新列的方式是 as ,解壓縮使字典鍵成為函數的參數。并且由于原始數據幀的索引受到尊重,因此會將數據幀的值替換為均值。assigndf.assign(a_given_column=a_value, another_column=some_other_value)df.assign(**df.mean())


查看完整回答
反對 回復 2022-09-13
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

在創建數據幀時,您只能提供一行:


pd.DataFrame(data = [df.mean()], index = df.index)

它提供:


     A         B

0  2.0  3.666667

1  2.0  3.666667

2  2.0  3.666667


查看完整回答
反對 回復 2022-09-13
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

重新創建數據幀。將平均值系列發送到字典,然后索引定義行數。


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://img1.sycdn.imooc.com//632070de0001570103940265.jpg

查看完整回答
反對 回復 2022-09-13
  • 3 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號