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

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

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)"
)
添加回答
舉報