如何计算数据框列中重复值的频率?

我在数据框中有一列是


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

我不确定我做错了什么,但我无法摆脱nans。在此列中,我想要一个不同的列,或一个字典,它可以为我提供 .csv 中不同值的频率计数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}

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


白衣非少年
浏览 252回答 3
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)

12345678_0001

只是不要将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  DUC              V001  2  1  2  1C001  2  0  1  1C002  3  2  1  0C003  2  1  2  0

MMMHUHU

要将值作为字典获取,您还可以尝试:df['WR Count'] = df['WR'].apply(lambda x: dict(Counter(x.split(', ')))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python