【发布时间】:2015-06-16 20:08:38
【问题描述】:
感觉好像我几乎到处都看过,我知道这可能非常简单。我正在使用 pandas 数据框,并希望根据该 SAME 列中的数据填充/替换其中一列中的数据。我通常更像是一个 excel 用户,它在 excel 中非常简单。如果我们有:
df = pd.DataFrame([0, -1, -1, -1, 0 , 0, 0, 1, 0])
df.columns = ['A']
df['B'] = df['A']
在 excel 中我想要做的是“ =IF(AND(A2=0, B1=-1), -1, A2) 这样我就可以向下拖动列 'B' 并且这将适用.本质上是基于B列的先验数据点,以及A列的当前值,我需要更新B列的当前值。
我试过了:
df['B'] = np.where((df['A'] == 0), (df['B'].shift(1) == -1),
df['B'].replace(to_value = 0, method = 'ffill'), df['A'])
还有很多其他版本,以及 iterrows 的变体和其他令人难以置信的极端解决方法,但无济于事。
非常感谢任何建议。
编辑:
结果是:
df['B'] = [0, -1, -1, -1, -1 , -1, -1, 1, 0]
【问题讨论】:
-
在您的问题中,解决方案中的特定值可能取决于原始系列的许多不同值,而不仅仅是先前的值。所以像 mishaF 的解决方案这样的循环可能是要走的路。在您尝试 df['B'] 的值时,最后一次全部替换,而不是一个接一个。
标签: python pandas replace fill calculated-columns