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/