【问题标题】:Updating cell in Pandas based on previous cell and different Column根据先前的单元格和不同的列更新 Pandas 中的单元格
【发布时间】:2020-05-13 17:30:36
【问题描述】:

我试图根据我拥有的 DataFrame 中的其他数据计算位置 L 处的单元格的值,但我无法弄清楚命名法是什么。它的输入甚至有点复杂,但它在 excel 中是一个相当标准的实现。我在下面展示了一个示例,我在此实例中询问 Col2 的逻辑。请原谅糟糕的格式。

| Col1 | Col2 |

| X |一个 |

|是 | Y+A |

| Z | Z+Y+A |

【问题讨论】:

  • 您能否更详细地解释您要做什么?您的问题似乎不清楚。

标签: python pandas dataframe math


【解决方案1】:

回答你的标题问题。

假设你的 df 是:

    col1
0   1
1   2
2   3
3   4
4   5

你想在你给出的逻辑中添加 A。

A = 5
(df['col1']).cumsum().add(A) - df['col1'][0]

输出:

0     5
1     7
2    10
3    14
4    19
Name: col1, dtype: int64

df['col1']).cumsum()

将给予:

1 (1)
3 (1+2)
6 (1+2+3)
10 (1+2+3+4)
15 (1+2+3+4+5)

添加 A=5 将得到:

6 (1+5)
8 (1+2+5)
11 (1+2+3+5)
15 (1+2+3+4+5)
20 (1+2+3+4+5+5)

减去第一个值会得到:

5 (1+5-1)
7 (1+2+5-1)
10 (1+2+3+5-1)
14 (1+2+3+4+5-1)
19 (1+2+3+4+5+5-1)

相当于

5 (5) <-- A
7 (2+5) <-- Y + A
10 (2+3+5) <-- Z + Y + A
14 (2+3+4+5) 
19 (2+3+4+5+5)

【讨论】:

  • 您是从哪里了解到 cum() 命令的?此外,这是一个非常有用的解释。
  • 我是通过解决一些问题学到的,显然是从 jezrael 对 pandas 的回答中学到的。你的问题解决了吗?如果是,您可以通过接受答案来关闭它。如果这是您正在寻找的答案。
【解决方案2】:

我最终使用了一个 forloop,cumsum 并没有做我需要的一切。我会在下面发布代码片段,以防有人需要。

for x in range(len(pDiff['HP Change'])) : 
    if x == 0:                            #special rules for first cell
        pDiff.iat[x, 2] = HPStateInit
        pDiff.iat[x, 2] = 4
    else:
        pDiff.iat[x, 2] = pDiff.iat[x, 1] + pDiff.iat[x-1,2]                   
                                          #Boundary Condition implementation
    pDiff['HP State'].loc[(pDiff['HP State'] > 7)] = 7                                                    
    pDiff['HP State'].loc[(pDiff['HP State'] < 0)] = 0                                                    

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 2017-12-14
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    相关资源
    最近更新 更多