我将从3个简单的示例开始:
pd.DataFrame([[True]]).sum()
0 1
dtype: int64
pd.DataFrame([True]).sum()
0 1
dtype: int64
pd.Series([True]).sum()
1
所有这些都是预期的。这是一个更复杂的示例。
df = pd.DataFrame([
['a', 'A', True],
['a', 'B', False],
['a', 'C', True],
['b', 'A', True],
['b', 'B', True],
['b', 'C', False],
], columns=list('XYZ'))
df.Z.sum()
4
也符合预期。但是,如果我groupby(['X', 'Y']).sum()
每个@unutbu的答案
熊猫正尝试将其重铸为原始dtype。我以为,也许我演奏过的组并没有真正地进行分组。所以我尝试了这个例子来测试这个想法。
df = pd.DataFrame([
['a', 'A', False],
['a', 'B', False],
['a', 'C', True],
['b', 'A', False],
['b', 'B', False],
['b', 'C', False],
], columns=list('XYZ'))
我会groupby('X')
和sum
。如果@unutbu是正确的,则这些和应该是1
和,0
并且可以强制转换为bool
,因此我们应该看到bool
df.groupby('X').sum()
果然… bool
但是,如果过程相同但值略有不同。
df = pd.DataFrame([
['a', 'A', True],
['a', 'B', False],
['a', 'C', True],
['b', 'A', False],
['b', 'B', False],
['b', 'C', False],
], columns=list('XYZ'))
df.groupby('X').sum()
学过的知识。astype(int)
执行此操作时,请务必使用或类似的方法。
df.groupby('X').sum().astype(int)
在两种情况下都能提供一致的结果。
发生这种情况是因为_cython_agg_blocks
调用试图返回与原始值
相同的dtype 结果(在本例中为)的结果
的_try_coerce_and_cast_result
调用。_try_cast_result
__bool
当使用Z
dtype
bool(并且所有组的True值不超过一个)时,这将返回一些特殊的信息。如果这些组中的任何一个具有2个或多个True值,则由于_try_cast_result
未将2.0转换回布尔值,因此结果值是浮点型
。
_try_cast_result
做更有用的东西时,Z
有D型int
:在内部,用Cython聚合通过使用 df.groupby(['X', 'Y']).sum()
一个回报result
的D型float
。然后,_try_cast_result
将结果返回到dtype int
。
问题内容: 我想知道为什么Java不允许将布尔值转换为整数,如下所示: 例如,这可以用一行代码来完成, 但似乎更好和更容易阅读的方法是允许类型转换,如和一样。Java为什么不包括此功能? 问题答案: 不允许这样做是因为Java设计人员(正确地)认识到C和C ++中的布尔/整数重载是错误的重要来源。 (我记得曾经写过一些设计原理的书,但我找不到。) 例如: 是合法的,但可能是用C或C ++编写的应用
问题内容: 在Java中将a转换boolean为an 的最常用方法是什么int? 问题答案: ^^ PS : true = 1 and false = 0
因此,我想知道是否有一个利索的方法来做这件事,除了
问题内容: Java中的所有数字都应为int类型。以下行在Java> 1.5中是合法的 同样的机制去和实例。但是龙的作品完全不同。以下代码给出了编译时错误 Long对长类型使用自动装箱方法,因此 我看不到为什么不能将int赋给Long变量。关于这个问题有什么想法吗? 问题答案: 我认为问题不在于泛型转换原语和包装。问题是关于将int转换为java.lang.Long和将int转换为java.lan
问题内容: 您可以将int隐式转换为double: 您可以将int显式转换为double: 您可以将double显式转换为int: 为什么不能将一个double隐式转换为int? : 问题答案: 的范围比宽。这就是为什么您需要显式强制转换。由于相同的原因,您不能隐式地从转换为:
我习惯了C / Java,我可以在哪里使用?:如: 由于Go没有三元运算符,如何在go中执行此操作?