Python 如何在数据框中仅保留线/列交点周围的数据?
如果我有一个数组,每行都有列索引,如下所示:Python 如何在数据框中仅保留线/列交点周围的数据?,python,pandas,Python,Pandas,如果我有一个数组,每行都有列索引,如下所示: array = [NaN, 3, 4, 3, NaN] 1 2 3 4 5 6 1 1 NaN NaN NaN NaN 1 2 1 1 1 NaN NaN 1 3 NaN 1 1 1 1 1 4 NaN 1 1 1 NaN 1 5 1 NaN 1 NaN NaN 1 1 2 3 4 5 6 1
array = [NaN, 3, 4, 3, NaN]
1 2 3 4 5 6
1 1 NaN NaN NaN NaN 1
2 1 1 1 NaN NaN 1
3 NaN 1 1 1 1 1
4 NaN 1 1 1 NaN 1
5 1 NaN 1 NaN NaN 1
1 2 3 4 5 6
1 NaN NaN NaN NaN NaN NaN
2 1 1 1 NaN NaN NaN
3 NaN 1 1 1 1 1
4 NaN 1 1 1 NaN NaN
5 NaN NaN NaN NaN NaN NaN
熊猫数据框如下:
array = [NaN, 3, 4, 3, NaN]
1 2 3 4 5 6
1 1 NaN NaN NaN NaN 1
2 1 1 1 NaN NaN 1
3 NaN 1 1 1 1 1
4 NaN 1 1 1 NaN 1
5 1 NaN 1 NaN NaN 1
1 2 3 4 5 6
1 NaN NaN NaN NaN NaN NaN
2 1 1 1 NaN NaN NaN
3 NaN 1 1 1 1 1
4 NaN 1 1 1 NaN NaN
5 NaN NaN NaN NaN NaN NaN
基本上,我只想保留与列索引相交并被列索引包围的数据。
如何为每行保留与列索引重叠的值,以便获得如下数据帧:
array = [NaN, 3, 4, 3, NaN]
1 2 3 4 5 6
1 1 NaN NaN NaN NaN 1
2 1 1 1 NaN NaN 1
3 NaN 1 1 1 1 1
4 NaN 1 1 1 NaN 1
5 1 NaN 1 NaN NaN 1
1 2 3 4 5 6
1 NaN NaN NaN NaN NaN NaN
2 1 1 1 NaN NaN NaN
3 NaN 1 1 1 1 1
4 NaN 1 1 1 NaN NaN
5 NaN NaN NaN NaN NaN NaN
与“我的行”列索引关联的数据保留在何处
比较输入和输出,您可以看到由
数组标记的单元格显示为勾号
1 2 3 4 5 6
1 NaN NaN NaN NaN NaN 1
2 1 1 ✓ NaN NaN 1
3 NaN 1 1 ✓ 1 1
4 NaN 1 ✓ 1 NaN 1
5 1 NaN 1 NaN NaN 1
从这里开始,还必须保留所有周围的非空单元格(在同一行中):
1 2 3 4 5 6
1 NaN NaN NaN NaN NaN 1
2 ✓ ✓ ✓ NaN NaN 1
3 NaN ✓ ✓ ✓ ✓ ✓
4 NaN ✓ ✓ ✓ NaN 1
5 1 NaN 1 NaN NaN 1
产生结果:
1 2 3 4 5 6
1 NaN NaN NaN NaN NaN NaN
2 1 1 1 NaN NaN NaN
3 NaN 1 1 1 1 1
4 NaN 1 1 1 NaN NaN
5 NaN NaN NaN NaN NaN NaN
我看到我的6
列与您在测试用例中提供的列不同,但由于它在测试用例中的屏蔽没有遵循其他列的模式,我认为这就是您的意思
希望这有助于:
index = [np.nan, 3, 4, 3, np.nan]
to_nan_mask = [x is np.nan for x in index]
df.loc[to_nan_mask, df.columns] = np.nan
输出:
1 2 3 4 5 6
0 NaN NaN NaN NaN NaN NaN
1 1.0 1.0 1.0 NaN NaN 1.0
2 NaN 1.0 1.0 1.0 1.0 1.0
3 NaN 1.0 1.0 1.0 NaN 1.0
4 NaN NaN NaN NaN NaN NaN
为什么列6
在第二行和第四行被遮住了?请把你的问题说得更清楚。@Martijn为了清楚起见,我编辑了这个问题。@coldspeed:这是一个相当大的推断飞跃。它恰好符合给定的预期输出,希望它是OP的实际含义。我不理解的是索引中实际列数3,4,3
的滚动。我也不理解它的含义,我认为它是一个布尔列,并以这种方式构建它。