gpt4 book ai didi

python - 将每列中的值分配为该列的总和

转载 作者:太空狗 更新时间:2023-10-30 01:43:24 26 4
gpt4 key购买 nike

我有 DataFrame,我正在尝试将每列中的所有值分配为该列的总和。

x = pd.DataFrame(data = [[1,2],[3,4],[5,6],[7,8],[9,10]],index=[1,2,3,4,5],columns=['a','b'])
x
a b
1 1 2
2 3 4
3 5 6
4 7 8
5 9 10

输出应该是

   a    b
1 25 30
2 25 30
3 25 30
4 25 30
5 25 30

我想使用 x.apply(f, axis=0),但我不知道如何在 lambda 函数中定义一个将列转换为所有列值之和的函数。以下行引发 SyntaxError: can't assign to lambda

f = lambda x : x[:]= x.sum()

最佳答案

另一个更快的 numpy 解决方案 numpy.tile :

print (pd.DataFrame(np.tile(x.sum().values, (len(x.index),1)), 
columns=x.columns,
index=x.index))
a b
1 25 30
2 25 30
3 25 30
4 25 30
5 25 30

另一种解决方案 numpy.repeat :

h = pd.DataFrame(x.sum().values[np.newaxis,:].repeat(len(x.index), axis=0),
columns=x.columns,
index=x.index)

print (h)
a b
1 25 30
2 25 30
3 25 30
4 25 30
5 25 30


In [431]: %timeit df = pd.DataFrame([x.sum()] * len(x))
1000 loops, best of 3: 786 µs per loop

In [432]: %timeit (pd.DataFrame(np.tile(x.sum().values, (len(x.index),1)), columns=x.columns, index=x.index))
1000 loops, best of 3: 192 µs per loop

In [460]: %timeit pd.DataFrame(x.sum().values[np.newaxis,:].repeat(len(x.index), axis=0),columns=x.columns, index=x.index)
The slowest run took 8.65 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 184 µs per loop

关于python - 将每列中的值分配为该列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com