我正在嘗試使用 for 回圈來計算值串列和反向計數器的尾隨乘積。也就是說,在回圈的每次迭代中,當前值將乘以 1,前一個值將乘以 2,依此類推回傳 n 個值,其中 n 是串列開頭和當前迭代。
下面的螢屏截圖顯示了我將如何使用 SUMPRODUCT 在 Excel 中執行此操作:
Excel 中的求和
在 Python 中,我可以使用 Numpy 中的 cumsum 來回傳值串列的滾動累積總和:
import numpy as np
import pandas as pd
data = [8,6,7,5,9]
df=pd.DataFrame(data=data,columns=['values'])
values=df['values']
test=[]
for x, index in enumerate(values):
test.append(np.cumsum(values)[x])
我也可以使用下面的來獲得反向計數器,但我不確定如何將其合并到第一個 for 回圈中,我不確定如何在每次迭代時將反向計數器重置為 1:
for i in reversed(range(len(values))):
print(i 1)
在回圈的每次迭代中重置計數器并將其合并到尾隨乘積中的最直接方法是什么?
先感謝您。
uj5u.com熱心網友回復:
正如@JonClements 所建議的,您可能需要簡單的
(df['values'] * range(len(df), 0, -1)).sum()
沒有任何for回圈
如果您需要部分結果,那么您可以獲得部分行,即。 sub_df = df[:3]
sub_df = df[:3]
(sub_df['values'] * range(len(sub_df), 0, -1)).sum()
最小作業示例
import pandas as pd
data = [8, 6, 7, 5, 9]
df = pd.DataFrame(data, columns=['values'])
size = 3
sub_df = df[:size]
#result = (sub_df['values'] * range(len(sub_df), 0, -1)).sum()
result = (sub_df['values'] * range(size, 0, -1)).sum()
print(f'result [{size}]: {result}')
size = 4
sub_df = df[:size]
#result = (sub_df['values'] * range(len(sub_df), 0, -1)).sum()
result = (sub_df['values'] * range(size, 0, -1)).sum()
print(f'result [{size}]: {result}')
結果:
result [3]: 43
result [4]: 69
編輯:
如果你想把所有的都放在 DataFrame 中
import pandas as pd
data = [8, 6, 7, 5, 9]
df = pd.DataFrame(data, columns=['values'])
# ---
size = 3
sub_df = df[:size]
result = (sub_df['values'] * range(size, 0, -1)).sum()
print(f'result [{size}]: {result}')
df['counter C'] = '' # default value
df.loc[:size-1, 'counter C'] = range(size, 0, -1)
df['result C'] = '' # default value
df.loc[size-1,'result C'] = result
# ---
size = 4
sub_df = df[:size]
result = (sub_df['values'] * range(size, 0, -1)).sum()
print(f'result [{size}]: {result}')
df['counter D'] = '' # default value
df.loc[:size-1, 'counter D'] = range(size, 0, -1)
df['result D'] = '' # default value
df.loc[size-1, 'result D'] = result
print(df)
結果:
values counter C result C counter D result D
0 8 3 4
1 6 2 3
2 7 1 43 2
3 5 1 69
4 9
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400810.html
