获取Pandas中最后一个非空值的索引

hmtdttj4  于 2022-09-21  发布在  其他
关注(0)|答案(2)|浏览(194)

让我们假设我有以下数据框:

  1. x y
  2. 1 -1.808909 0.093380
  3. 2 1.733595 -0.380938
  4. 3 -1.385898 0.714071

我想在“y”之后的列中插入一个值。但是,我可能会插入多个值。

因此,我需要检查“y”后面的单元格是否为空,以避免覆盖该单元格。

因此,预期输出可能如下所示

  1. x y
  2. 1 -1.808909 0.093380 5
  3. 2 1.733595 -0.380938 6 7
  4. 3 -1.385898 0.714071 8

与上面的输入相比,我需要首先检查单元格是否为空。

我想我可以用:x = df.iloc[1,:].last_valid_index()

但该方法返回的是“y”,而不是“y”的索引1。

稍后,我将使用该索引插入“5”:

  1. x +=1
  2. df.iloc[1,x] = 5

我想使用这种方法来查找最后一个非空单元格,因为输出中有第二行。您可以看到,如果我总是使用相同的方法,则需要插入“6”,然后插入“7”:

  1. df.iloc[1,2] = 6
  2. df.iloc[1,2] = 7

在插入“7”时会覆盖“6”

还有一件事,我不能使用类似:(df['y'].iloc[2]).index的内容来查找该值,因为稍后我将有两个“y”列,因此,这可能会导致返回的索引号小于所需的索引号。

wfsdck30

wfsdck301#

很容易识别数字数组或 Dataframe 中每一行的第一个零的位置。让我们创建一个在某个位置后带有零的 Dataframe :

  1. df = pd.DataFrame(np.random.normal(size=(5, 10)))
  2. df
  1. 0 1 2 3 4 5 6 7 8 9
  2. 0 4 1 4 2 6 0 0 0 0 0
  3. 1 5 4 9 5 5 4 0 0 0 0
  4. 2 6 6 6 5 4 8 6 0 0 0
  5. 3 5 3 9 5 3 9 6 3 0 0
  6. 4 3 2 7 9 7 6 6 7 5 0

例如,下面的代码将给出数据框中值为0的所有位置

  1. np.argwhere(df.values == 0)
  1. array([[0, 5],
  2. [0, 6],
  3. [0, 7],
  4. [0, 8],
  5. [0, 9],
  6. [1, 6],
  7. [1, 7],
  8. [1, 8],
  9. [1, 9],
  10. [2, 7],
  11. [2, 8],
  12. [2, 9],
  13. [3, 8],
  14. [3, 9],
  15. [4, 9]], dtype=int64)

或者,您可以获得值不为零的位置:

  1. np.argwhere(df.values != 0)
  1. array([[0, 0],
  2. [0, 1],
  3. [0, 2],
  4. [0, 3],
  5. [0, 4],
  6. [1, 0],
  7. [1, 1],
  8. [1, 2],
  9. [1, 3],
  10. [1, 4],
  11. [1, 5],
  12. [2, 0],
  13. [2, 1],
  14. [2, 2],
  15. [2, 3],
  16. [2, 4],
  17. [2, 5],
  18. [2, 6],
  19. [3, 0],
  20. [3, 1],
  21. [3, 2],
  22. [3, 3],
  23. [3, 4],
  24. [3, 5],
  25. [3, 6],
  26. [3, 7],
  27. [4, 0],
  28. [4, 1],
  29. [4, 2],
  30. [4, 3],
  31. [4, 4],
  32. [4, 5],
  33. [4, 6],
  34. [4, 7],
  35. [4, 8]], dtype=int64)

我希望这会有帮助。

展开查看全部
ne5o7dgx

ne5o7dgx2#

我建议这是一个不那么复杂的解决方案

  1. import random
  2. nums = [0, 7, 78, 843, 34893, 0 , 2, 23, 4, 0]
  3. random.shuffle(nums)
  4. thg = [x for x in nums if x != 0]
  5. print(thg[0])

这样做的目的是洗牌“数字”列表,并过滤掉所有的零。然后,它打印第一个非零值

相关问题