在每个匹配索引的实例上向DataFrame添加预定义的值。

huangapple go评论98阅读模式
英文:

Add pre-defined value to DataFrame on each instance of matching index

问题

我正在尝试在df1中的每次名称和周匹配的情况下,将df中的相应值添加到df1中。

期望的结果是:

  1. df1
  2. Name Week Total
  3. 0 Frank Week 1 16
  4. 1 Frank Week 1 3
  5. 2 Frank Week 3 **36**
  6. 3 Frank Week 3 **9**
  7. 4 Frank Week 4 3
  8. ...
  9. 310 Daniel Week 2 50
  10. 311 Daniel Week 3 **58**
  11. 312 Daniel Week 4 78
  12. 313 Kevin Week 4 162
  13. 314 Kevin Week 4 46
英文:

I am trying to add the corresponding value from df to df1 for each time the name and week match in df1

  1. df
  2. Name Week Value
  3. 0 Frank Week 3 8.0
  4. 1 Bob Week 3 8.0
  5. 2 Bob Week 4 8.0
  6. 3 Elizabeth Week 3 4.0
  7. 4 Mario Week 2 1.5
  8. 5 Mario Week 3 2.5
  9. 6 Michelle Week 3 8.0
  10. 7 Michelle Week 4 1.0
  11. 8 Darwin Week 1 1.0
  12. 9 Darwin Week 2 0.5
  13. 10 Darwin Week 3 11.0
  14. 11 Collins Week 1 8.0
  15. 12 Collins Week 2 6.0
  16. 13 Collins Week 3 17.0
  17. 14 Collins Week 4 7.0
  18. 15 Alexis Week 1 1.5
  19. 16 Daniel Week 3 2.0
  20. df1
  21. Name Week Total
  22. 0 Frank Week 1 16
  23. 1 Frank Week 1 3
  24. 2 Frank Week 3 28
  25. 3 Frank Week 3 1
  26. 4 Frank Week 4 3
  27. .. ... ... ...
  28. 310 Daniel Week 2 50
  29. 311 Daniel Week 3 56
  30. 312 Daniel Week 4 78
  31. 313 Kevin Week 4 162
  32. 314 Kevin Week 4 46

Expected:

  1. df1
  2. Name Week Total
  3. 0 Frank Week 1 16
  4. 1 Frank Week 1 3
  5. 2 Frank Week 3 **36**
  6. 3 Frank Week 3 **9**
  7. 4 Frank Week 4 3
  8. .. ... ... ...
  9. 310 Daniel Week 2 50
  10. 311 Daniel Week 3 **58**
  11. 312 Daniel Week 4 78
  12. 313 Kevin Week 4 162
  13. 314 Kevin Week 4 46

答案1

得分: 0

使用merge + assign

  1. out = (df1
  2. .merge(df, how='left')
  3. .assign(Total=lambda d: d['Total'].add(d.pop('Value'), fill_value=0))
  4. )

输出:

  1. Name Week Total
  2. 0 Frank Week 1 16.0
  3. 1 Frank Week 1 3.0
  4. 2 Frank Week 3 36.0
  5. 3 Frank Week 3 9.0
  6. 4 Frank Week 4 3.0
  7. ...
  8. 5 Daniel Week 2 50.0
  9. 6 Daniel Week 3 58.0
  10. 7 Daniel Week 4 78.0
  11. 8 Kevin Week 4 162.0
  12. 9 Kevin Week 4 46.0
英文:

Use a merge + assign:

  1. out = (df1
  2. .merge(df, how='left')
  3. .assign(Total=lambda d: d['Total'].add(d.pop('Value'), fill_value=0))
  4. )

Output:

  1. Name Week Total
  2. 0 Frank Week 1 16.0
  3. 1 Frank Week 1 3.0
  4. 2 Frank Week 3 36.0
  5. 3 Frank Week 3 9.0
  6. 4 Frank Week 4 3.0
  7. ...
  8. 5 Daniel Week 2 50.0
  9. 6 Daniel Week 3 58.0
  10. 7 Daniel Week 4 78.0
  11. 8 Kevin Week 4 162.0
  12. 9 Kevin Week 4 46.0

huangapple
  • 本文由 发表于 2023年6月1日 22:28:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/76382981.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定