python - 我在学习 python 类(class)时无法理解一段代码是什么

标签 python pandas jupyter-notebook

sum_of_dice = die.sample(2, replace=True).sum().loc[0]

这是求两个骰子扔在一起的面之和的代码。在这段代码中我不明白 loc[0] 在做什么

代码正在运行。但我想知道 .loc[0] 在这段代码中做了什么:

import pandas as pd
die = pd.DataFrame([1, 2, 3, 4, 5, 6])
sum_of_dice = die.sample(2, replace=True).sum().loc[0]
print('Sum of dice is', sum_of_dice)

最佳答案

因为die定义为pandas.DataFrame它本质上是二维的。

die = pd.DataFrame([1, 2, 3, 4, 5, 6])
die

   0
0  1
1  2
2  3
3  4
4  5
5  6

<强> pandas.DataFrame.sample 将返回另一个 pandas.DataFrame这是二维的

roll = die.sample(2, replace=True)
roll

   0
1  2
4  5

当我们 pandas.DataFrame.sum ,默认情况下,我们对每一列求和并返回 pandas.Series其中 pandas.Series 的索引在哪里是 pandas.DataFrame 的列对象我们总结了。

roll.sum()

0    7
dtype: int64

这是一个 pandas.Series具有一个值。如果我们只想要第一个值,我们可以使用 loc[0]

roll.sum().loc[0]

7
<小时/>

我会做什么

使用 pandas.Series定义die

import pandas as pd
die = pd.Series([1, 2, 3, 4, 5, 6])
sum_of_dice = die.sample(2, replace=True).sum()
print('Sum of dice is', sum_of_dice)

在本例中die是一维 pandas.Series因此,die.sample(2, replace=True) 也是如此。 。因此,幸运的是,pandas.Series 的总和是一个标量...以及我们想要的。无需使用loc 。另外,创建一个 pandas.DataFrame比创建 pandas.Series 需要更多的努力。另外,调用loc也有一点开销。总之,我们保存了 2 pandas.DataFrames 的创建(一个来自 pd.Series 而不是 pd.DataFrame ,两个来自 die.sample ,这创建了另一个 pandas.Series 而不是另一个 pandas.DataFrame ),我们为自己节省了一个 loc 。打电话。

关于python - 我在学习 python 类(class)时无法理解一段代码是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57095547/

相关文章:

python - 有没有一种更简单的方法可以将列表随机拆分为子列表而无需在 python 中重复元素?

python - 创建接受 kwargs 的 str(或 int 或 float 或 tuple)的 child

python - 在 Python 中将具有多个特征的分类数据转换为数字的最快方法是什么?

python - 如何为 Jupyter notebook 中的每个单元格启用计时魔法?

python - Pyspark:显示数据框列的直方图

ipython - 是否有一种纯粹的 Markdown 方式可以在 Jupyter 中并排包含两个图像?

python - 当 pandas 中存在空值时,to_list 不适用于 pandas

python - 在数据框上按 groupby 平铺

python - 用 Pandas 中另一个数据框中的值填充空值

python - Pandas:使用 bool 掩码替换多列的值