我想从我的一个Pandas数据框列创建一个唯一值的计数,然后将包含这些计数的新列添加到我的原始数据框中。我尝试了几种不同的方法。我创建了一个Pandas系列,然后使用value_counts方法计算计数。我尝试将这些值合并回我的原始数据框,但我想合并的键在索引(ix/loc)中。
Color Value
Red 100
Red 150
Blue 50
我想返回类似于:
Color Value Counts
Red 100 2
Red 150 2
Blue 50 1
8条答案
按热度按时间628mspwn1#
例如,
请注意,
transform('count')
忽略NaNs。如果要计算NaNs,请使用transform(len)
。致匿名编辑:如果您在使用
transform('count')
时遇到错误,可能是因为您的Pandas版本太旧。以上程序适用于Pandas 0.15或更新版本。2admgd592#
另一个选择:
此选项将为您提供一个包含重复计数值的列,对应于“颜色”列中每个值的频率。
gc0ot86w3#
这个答案使用
Series.map
和Series.value_counts
。它是用Pandas 1.1测试的。贷方:comment,通过 sacuL
ruyhziif4#
df['Counts'] = df.Color.groupby(df.Color).transform('count')
您可以对任何系列执行此操作:将其单独分组并调用
transform('count')
:t2a7ltrp5#
我最初的想法是使用列表解析,如下所示,但正如评论中指出的,这比
groupby
和transform
方法要慢。我将把这个答案留给演示不应该做什么:@unutbu的方法对于具有多个列的DataFrames来说变得复杂,这使得编写代码变得简单。如果您正在处理一个小 Dataframe ,这会更快(见下文),但否则,您应该使用而不是use this。
omjgkv6w6#
创建一个包含重复值计数的列。这些值是从其他列计算出来的临时计算。非常快。归功于@ZakS。
bqucvtff7#
虽然已经有很多伟大的答案在这里,我个人认为使用:
(给定 Dataframe = df)
是最好和最直接的选择之一。。我想提供另一种方法,我已经成功地使用。
这里我们实际上是把要计数的列转换为lambda表达式中的一个序列,然后使用np.sum来计数序列中每个值的出现次数。
认为这可能是有用的,从来没有坏有多个选择!
dba5bblo8#
使用
nunique
命令沿着dropna
来减少NaN值。也在谷歌协作中测试了这个。有关
nunique
Read this blog.输出的更多了解: