在定义的条件下使用值_counts()

2024-04-20 10:21:41 发布

您现在位置:Python中文网/ 问答频道 /正文

在经历了许多错误、异常和高血压之后,我终于想出了这个解决方案,它可以满足我的需要:基本上,我需要计算所有符合特定条件的列值

假设我有一个字符串列表,就像

vehicle = ['car', 'boat', 'car', 'car', 'bike', 'tank', 'DeLorean', 'tank']

我想计算哪些值出现2次以上

认为基于列表的数据文件的列名是“VEH”。

因此,这段代码是有效的:

df['veh'].value_counts()[df['veh'].value_counts() > 2]

问题是[df['veh'].value_counts() > 2]部分为什么紧跟在value_counts()的“()”之后?没有“.”或任何其他可能意味着什么的链接符号

如果我使用代码

df['classi'].value_counts() > 1

(这将是我有限的大脑可以抽象的逻辑合成器),它返回布尔值

有人能帮我理解熊猫背后的逻辑吗

我很确定熊猫是很棒的,问题就在我这边,但我真的很想了解它。我已经阅读了很多资料(包括文档),但找不到解决我这个差距的办法

提前谢谢你


Tags: 代码df列表value错误逻辑解决方案car
2条回答

逻辑是,您可以使用相同大小的布尔序列对序列进行切片:

s[bool_series]

或同等地

s.loc[bool_series]

这也被称为boolean indexing

现在,您的代码相当于:

s = df['veh'].value_counts()

bool_series = s > 2

然后是前两行中的任何一行,例如s[s>2]

下面的代码行

df['veh'].value_counts()

返回一个系列,其中键作为索引,出现次数作为值

方括号[]之间的所有内容都是熊猫系列关键帧上的过滤器。所以

df['veh'].value_counts()['car']

应返回“veh”列中“car”一词的出现次数。这相当于系列df['veh'].value_counts()上键“car”的对应值

熊猫系列也接受键列表作为索引,所以

df['veh'].value_counts()[['car','boat']]

应分别返回单词“car”和“boat”的出现次数

此外,如果布尔值列表与序列长度相同,则序列接受布尔值列表作为键。也就是说,它接受一个布尔掩码

当你写作时

df['veh'].value_counts() > 2

df['veh'].value_counts()上的每个值与数字2进行比较。这将为每个值返回一个布尔值,即布尔掩码

因此,可以将布尔掩码用作所创建序列的过滤器。因此

df['veh'].value_counts()[df['veh'].value_counts() > 2]

返回出现次数大于2的关键点的所有出现次数

相关问题 更多 >