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

as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别

甘西岭
2023-03-14
问题内容

编辑: 我在np.nan@ coldspeed,@ wen-ben,@
ALollz指出的字符串中犯的菜鸟错误。答案非常好,因此我不会删除此问题以保留这些答案。

原文:
我已经阅读了这个问题/答案groupby.first()和groupby.head(1)有什么区别?

该答案说明差异在于处理NaN价值上。但是,当我打电话给groupbyas_index=False,他们俩都选择了NaN

此外,Pandas具有groupby.nth与和类似的功能head,并且first

有什么差异groupby.first(), groupby.nth(0), groupby.head(1)as_index=False

下面的例子:

In [448]: df
Out[448]:
   A       B
0  1  np.nan
1  1       4
2  1      14
3  2       8
4  2      19
5  2      12

In [449]: df.groupby('A', as_index=False).head(1)
Out[449]:
   A       B
0  1  np.nan
3  2       8

In [450]: df.groupby('A', as_index=False).first()
Out[450]:
   A       B
0  1  np.nan
1  2       8

In [451]: df.groupby('A', as_index=False).nth(0)
Out[451]:
   A       B
0  1  np.nan
3  2       8

我看到`firs()’重置了索引,而其他2则没有。除此之外,还有什么区别吗?


问题答案:

主要问题是您可能'np.nan'存储了字符串,而不是真正的null值。以下是这三个null值的不同处理方式:

样本数据:

import pandas as pd
df = pd.DataFrame({'A': [1,1,2,2,3,3], 'B': [None, '1', np.NaN, '2', 3, 4]})

first

这将返回每个组中的第一个非空值。奇怪的是它不会跳过None,尽管可以通过kwarg来实现dropna=True。因此,
您可能会返回原来属于不同行的列的值

df.groupby('A', as_index=False).first()
#   A     B
#0  1  None
#1  2     2
#2  3     3

df.groupby('A', as_index=False).first(dropna=True)
#   A  B
#0  1  1
#1  2  2
#2  3  3

head(n)

返回组中的前n行。 值保持在行内 。如果您给它的n行数超过了行数,它将返回该组中的所有行而不会抱怨:

df.groupby('A', as_index=False).head(1)
#   A     B
#0  1  None
#2  2   NaN
#4  3     3

df.groupby('A', as_index=False).head(200)
#   A     B
#0  1  None
#1  1     1
#2  2   NaN
#3  2     2
#4  3     3
#5  3     4

nth

这占用了nth行,因此 再次 保持在row内
.nth(0)与相同.head(1),但用途不同。例如,如果您需要第0行和第2行,则很难做到.head(),而使用则容易.nth([0,2])。同样,它.head(10)比容易编写.nth(list(range(10))))

df.groupby('A', as_index=False).nth(0)
#   A     B
#0  1  None
#2  2   NaN
#4  3     3

nth 还支持删除具有任何空值的行,因此您可以使用它返回不包含任何空值的第一行,这与 .head()

df.groupby('A', as_index=False).nth(0, dropna='any')
#   A  B
#A      
#1  1  1
#2  2  2
#3  3  3


 类似资料:
  • 问题内容: 在JPA中,我什么时候使用属性和注释感到困惑。有什么区别? 问题答案: 是用于生成架构的指令。在类中生成的数据库列将在实际数据库中标记为不可为空。 是运行时指令。它所做的主要功能是与延迟加载有关。您不能延迟加载非集合映射的实体,除非您记得设置了optional = false(因为Hibernate不知道那里应该有一个代理还是一个null,除非您告诉它null是不可能的,否则它可以生成

  • 问题内容: 我只是想知道这两个执行的功能有什么不同? 数据: as_index = False: reset_index(): 他们两个都给出完全相同的输出。 谁能告诉我有什么区别,还可以举例说明吗? 问题答案: 使用时,表示您不想将列ID设置为索引(duh!)。当两个实现产生相同的结果时,请使用,因为这样可以节省一些键入时间和不必要的pandas操作;) 但是,有时您想对组应用更复杂的操作。在这

  • 问题内容: 抱歉,我是Java新手,所以这个问题可能不清楚。 最近,我一直在尝试将try和catch语句包含在while循环中,因为我想确保从程序的其余部分中获取输入。 我遇到了一个问题,在while条件(例如,while(!done))中,在变量前面使用感叹号(!),而不是使用= false(例如,while(done = false))会更改程序的方式运行。 前者(!done)导致try和ex

  • 问题内容: in Pandas中in的功能到底是什么? 问题答案: 当你什么都不懂的时候是你的朋友。它清除了很多次疑问。 看一看: 输出: 当您使用的键将成为新数据框中的索引时。 将列设置为索引时,将获得以下好处: 速度。 当您基于索引列过滤值时,例如 ,因为索引列的散列会更快。不必遍历整个列即可找到。它将只计算的哈希值,并在1 go内找到它。 缓解。 当您可以使用较短和较快的语法,而不是较长和较

  • 问题内容: 两者都意味着空间,但是有什么区别吗? 问题答案: 一个是不间断空间,另一个是常规空间。不间断的空格表示该行不应在该点处换行,就像它不会在一个单词的中间换行一样。 此外,正如斯文德(Svend)在其评论中指出的那样,不间断的空间不会崩溃。

  • 本文向大家介绍<%# %> 和 <% %> 有什么区别?相关面试题,主要包含被问及<%# %> 和 <% %> 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 答:<%# %>表示绑定的数据源 <%%>是服务器端代码块