当前位置: 首页 > 面试题库 >

熊猫列列表中每行的第一个非空值

令狐建修
2023-03-14
问题内容

如果我在Pandas中有一个DataFrame,看起来像这样:

    A   B   C
0   1 NaN   2
1 NaN   3 NaN
2 NaN   4   5
3 NaN NaN NaN

如何从每一行中获取第一个非空值?例如,上面我想得到:([1, 3, 4, None]或等效的Series)。


问题答案:

这是一种非常麻烦的方法,首先用于first_valid_index获取有效列,将返回的序列转换为数据框,以便我们可以apply逐行调用并将其索引回原始df:

In [160]:
def func(x):
    if x.values[0] is None:
        return None
    else:
        return df.loc[x.name, x.values[0]]
pd.DataFrame(df.apply(lambda x: x.first_valid_index(), axis=1)).apply(func,axis=1)
​
Out[160]:
0     1
1     3
2     4
3   NaN
dtype: float64

编辑

稍微干净一点的方法:

In [12]:
def func(x):
    if x.first_valid_index() is None:
        return None
    else:
        return x[x.first_valid_index()]
df.apply(func, axis=1)

Out[12]:
0     1
1     3
2     4
3   NaN
dtype: float64


 类似资料:
  • 正在尝试生成包含多个“值”列的透视表。我知道我可以使用aggfunc以我想要的方式聚合值,但如果我不想对两列求和或平均,而是希望一列求和,而另一列求平均值,该怎么办。那么,有没有可能用熊猫来做呢? 现在,这将得到一个带有和的透视表: 这意味着: 我怎么能得到和的平均值? 希望我的问题足够清楚。

  • 本文向大家介绍Python列表中的第一个非空字符串,包括了Python列表中的第一个非空字符串的使用技巧和注意事项,需要的朋友参考一下 给定一个字符串列表,让我们找出第一个非空元素。挑战在于–列表开头可能有一个,两个或多个空字符串,我们必须动态地找出第一个非空字符串。 下一个 如果当前元素为null,则应用next函数继续移动到下一个元素。 示例 输出结果 运行上面的代码给我们以下结果- 与文件管

  • 问题内容: 有一个像下面这样的数据框,它有一个不干净的列“ id”,它应该是数字列 是否有一种简洁的方法删除行,因为tt和de不是数值 使数据框干净? 问题答案: 您可以使用标准的字符串方法,并将其应用于列中的每个值: 或者,如果您想用作索引,则可以执行以下操作: 编辑。添加时间 虽然情况下与未使用的方法,它比与施加慢几乎两倍于列。另外,我使用pandas添加了选项,它键入的次数更少,但使用起来还

  • 问题内容: 我有一个示例数据框显示如下。对于每一行,我想先检查c1,如果它不为null,则检查c2。通过这种方式,找到第一个非空列并将该值存储到列结果中。 我现在正在使用这种方式。但是我想知道是否有更好的方法。(列名没有任何模式,这只是示例) 当有很多列时,此方法看起来不好。 问题答案: 首先使用回填s,然后通过以下方式选择第一列: 要么: 性能 :

  • 问题内容: 我的数据框看起来像这样,只是更大了。 首先,我尝试对每个列进行单独排序。我试过玩类似的东西:但是最终只会出错。如何分别对每一列进行排序,以得到类似以下内容的结果: 其次,我希望将列中的行连接起来 在用’‘替换np.nan之后,我可以将所有内容与上面的行结合起来,但是结果一起被粉碎(’AB’),并且需要额外的步骤来清理(变成’A:B’之类)。 问题答案: 这是一种方法: 但是,您所做的有

  • 问题内容: 我试图获取许多列中的第一个非空值。我知道我可以使用每列的子查询来完成此操作。以性能的名义(在这种情况下确实很重要),我想一次完成。 以以下示例数据为例: 我的梦想查询将在每个数据列中找到第一个非null值,并按排序。 例如,选择第一三列的神奇骨料时,排序由所述下降。 或升序排序时: 有人知道解决方案吗? 问题答案: 可以与一起使用。是必需的,因为SQL Server首先对null进行排