如何在dataframe中进行复杂计算

pgccezyw  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(373)

示例 Dataframe :

  1. df = pd.DataFrame({'sales': ['2020-01','2020-02','2020-03','2020-04','2020-05','2020-06'],
  2. '2020-01': [24,42,18,68,24,30],
  3. '2020-02': [24,42,18,68,24,30],
  4. '2020-03': [64,24,70,70,88,57],
  5. '2020-04': [22,11,44,3,5,78],
  6. '2020-05': [11,35,74,12,69,51]}

我想在下面找到 df['L2'] 我研究了Pandas滚球,群比,等等,都不能解决它。
请阅读l2公式并给我一个意见
l2公式

  1. L2(Jan-20) = 24
  2. -------------------
  3. sales 2020-01
  4. 0 2020-01 24
  5. -------------------
  6. L2(Feb-20) = 132 (sum of below matrix 2x2)
  7. sales 2020-01 2020-02
  8. 0 2020-01 24 24
  9. 1 2020-02 42 42
  10. -------------------
  11. L2(Mar-20) = 154 (sum of matrix 2x2)
  12. sales 2020-02 2020-03
  13. 0 2020-02 42 24
  14. 1 2020-03 18 70
  15. -------------------
  16. L2(Apr-20) = 187 (sum of below maxtrix 2x2)
  17. sales 2020-03 2020-04
  18. 0 2020-03 70 44
  19. 1 2020-04 70 3

输出

  1. Unnamed: 0 sales Jan-20 Feb-20 Mar-20 Apr-20 May-20 L2 L3
  2. 0 0 Jan-20 24 24 64 22 11 24 24
  3. 1 1 Feb-20 42 42 24 11 35 132 132
  4. 2 2 Mar-20 18 18 70 44 74 154 326
  5. 3 3 Apr-20 68 68 70 3 12 187 350
  6. 4 4 May-20 24 24 88 5 69 89 545
  7. 5 5 Jun-20 30 30 57 78 51 203 433
nwwlzxa7

nwwlzxa71#

  1. Values=f.values[:,1:]
  2. L2=[]
  3. RANGE=Values.shape[0]
  4. for a in range(RANGE):
  5. if a==0:
  6. result=Values[a,a]
  7. else:
  8. if Values[a-1:a+1,a-1:a+1].shape==(2,1):
  9. result=np.sum(Values[a-1:a+1,a-2:a])
  10. else:
  11. result=np.sum(Values[a-1:a+1,a-1:a+1])
  12. L2.append(result)
  13. print(L2)
  14. L2 output:-->[24, 132, 154, 187, 89, 203]
  15. f["L2"]=L2

f:

展开查看全部
oaxa6hgo

oaxa6hgo2#

  1. import pandas as pd
  2. import numpy as np
  3. # make a dataset
  4. df = pd.DataFrame({'sales': ['2020-01','2020-02','2020-03','2020-04','2020-05','2020-06'],
  5. '2020-01': [24,42,18,68,24,30],
  6. '2020-02': [24,42,18,68,24,30],
  7. '2020-03': [64,24,70,70,88,57],
  8. '2020-04': [22,11,44,3,5,78],
  9. '2020-05': [11,35,74,12,69,51]})
  10. print(df)
  11. # datawork(L2)
  12. for i in range(0,df.shape[0]):
  13. if i==0:
  14. df.loc[i,'L2']=df.loc[i,'2020-01']
  15. else:
  16. if i!=df.shape[0]-1:
  17. df.loc[i,'L2']=df.iloc[i-1:i+1,i:i+2].sum().sum()
  18. if i==df.shape[0]-1:
  19. df.loc[i,'L2']=df.iloc[i-1:i+1,i-1:i+1].sum().sum()
  20. print(df)
  21. # sales 2020-01 2020-02 2020-03 2020-04 2020-05 L2
  22. # 0 2020-01 24 24 64 22 11 24.0
  23. # 1 2020-02 42 42 24 11 35 132.0
  24. # 2 2020-03 18 18 70 44 74 154.0
  25. # 3 2020-04 68 68 70 3 12 187.0
  26. # 4 2020-05 24 24 88 5 69 89.0
  27. # 5 2020-06 30 30 57 78 51 203.0
展开查看全部

相关问题