如何仅将数据保留在Pandas数据框中的线/列相交处?

时间:2019-03-01 21:37:15

标签: 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   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标记的单元格显示为刻度线。

      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

1 个答案:

答案 0 :(得分:0)

  

我看到我的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