【发布时间】:2017-09-16 12:32:48
【问题描述】:
我在使用条件/布尔索引时遇到问题。我正在尝试使用以来自类似形状的数据框 (dfs) 的数据加上其自身的前一行 (dfp) 的数据为条件的逻辑填充数据框 (dfp)。 这是我最近的失败...
import pandas as pd
dfs = pd.DataFrame({'a':[1,0,-1,0,1,0,0,-1,0,0],'b':[0,1,0,0,-1,0,1,0,-1,0]})
In [171]: dfs
Out[171]:
a b
0 1 0
1 0 1
2 -1 0
3 0 0
4 1 -1
5 0 0
6 0 1
7 -1 0
8 0 -1
9 0 0
dfp = pd.DataFrame(index=dfs.index,columns=dfs.columns)
dfp[(dfs==1)|((dfp.shift(1)==1)&(dfs!=-1))] = 1
In [166]: dfp.fillna(0)
Out[166]:
a b
0 1.0 0.0
1 0.0 1.0
2 0.0 0.0
3 0.0 0.0
4 1.0 0.0
5 0.0 0.0
6 0.0 1.0
7 0.0 0.0
8 0.0 0.0
9 0.0 0.0
因此,如果满足以下两个条件之一,我希望 dfp 在第 n 行中有一个 1:
1) dfs same row = 1 or 2) both dfp previous row = 1 and dfs same row <> -1
我希望我的最终输出如下所示:
a b
0 1 0
1 1 1
2 0 1
3 0 1
4 1 0
5 1 0
6 1 1
7 0 1
8 0 0
9 0 0
更新/编辑: 有时视觉效果更有帮助 - 下面是它在 Excel 中的映射方式。
提前致谢,非常感谢您抽出宝贵时间。
【问题讨论】:
-
也许你解释了逻辑。我认为-1意味着向上移动正确吗?但是,我不理解索引 5 的 A 列中的 1。
-
注意到,斯科特。已修复 - 很抱歉如此含糊。
-
[a][6] 来自哪里? (在您想要的输出中)
-
奥斯汀 - dfp.ix[6,a] 应该 = 1 因为 (dfp.ix[5,a]==1) & (dfs.ix[6,a]!=-1) - 见上文,更新更清晰。
-
@MJS 在我看来,第 5 行似乎是 0,0。您是否认为行的处理是相互依赖的?
标签: python pandas indexing boolean conditional