我在数据框中有一个列
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}
或类似的字典。谢谢! :)
答案 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(', ')))