如何计算dataframe列中重复值的频率?

时间:2019-03-19 00:16:39

标签: python pandas dataframe

我在数据框中有一个列

UC      WR
V001    A, B, C, nan, A, C, D
C001    nan, C, D, A, nan, A
C002    C, B, B, A, A, A
C003    A, C, A, C, B, nan

我不确定自己在做什么错,但是我无法摆脱nan。在此列中,我想要一个不同的列,或者一个字典,该字典可以为我提供WR中不同值的频率计数。

UC     WR Count
V001  {A: 2, B:1, C:2, D:1}
C001  {A:2, C:1, D:1}
C002  {A:3, B:2, C:1}
C003  {A:2, B:1, C:2}

或类似的字典。谢谢! :)

3 个答案:

答案 0 :(得分:3)

首先忽略nan条目,我的方法是:

df['WR Count'] = df.WR.str.replace(' ', '').str.split(',').apply(Counter)

#                          WR                                    WR Count
# UC                                                                                                        
# V001  A, B, C, nan, A, C, D  {'A': 2, 'B': 1, 'C': 2, 'nan': 1, 'D': 1}                               
# C001   nan, C, D, A, nan, A          {'nan': 2, 'C': 1, 'D': 1, 'A': 2}                               
# C002       C, B, B, A, A, A                    {'C': 1, 'B': 2, 'A': 3}                           
# C003     A, C, A, C, B, nan          {'A': 2, 'C': 2, 'B': 1, 'nan': 1} 

请注意,如果您确定分隔符始终为 ', ',则可以对其进行硬编码,从而得到较短的命令:

df['WR Count'] = df.WR.str.split(', ').apply(Counter)

答案 1 :(得分:1)

只需不要将dict放入pandas的单元格中,这将使许多内置pandas的好函数不再起作用

df.set_index('UC').WR.\
 str.split(', ',expand=True).\
    stack().str.get_dummies().sum(level=0).drop('nan',1)
      A  B  C  D
UC              
V001  2  1  2  1
C001  2  0  1  1
C002  3  2  1  0
C003  2  1  2  0

答案 2 :(得分:0)

要获取值作为字典,您也可以尝试:

df['WR Count'] = df['WR'].apply(lambda x: dict(Counter(x.split(', ')))
相关问题