通过使用值计数拆分来进行pandas字符串比较

时间:2017-05-23 14:51:04

标签: python pandas

我是使用pandas的新手,我正在尝试创建一种匹配具有低value_counts的pandas中的字符串的方法,然后更改它们以匹配具有更高值计数的类似字符串。我试过分裂琴弦,但我无法弄清楚下一部分。我想要做的是检查具有更高值计数的数组中是否存在长度超过2个字符的拆分字符串,然后取最高值计数匹配,以便该列的所有匹配字符串相同。大约有18个不同的值计数,我的目标是将其设置为应该大约10或11的最小数字。它来自更大的数据帧,并且有许多类似的组要重复此操作。这就是我到目前为止所做的。

vc = data['event_name'].value_counts()
   str_arr = []
   for v in vc[vc < 10].index:
       str_arr.append(v.split())

然后我可以手动检查字符串:

data[data['event_name'].str.contains(str1, str2)]

我不确定如何使用循环在数据框中进行匹配和更新,还要确保字符串中不包含低value_count字符串以匹配。

1 个答案:

答案 0 :(得分:1)

如果你从

开始
.insertRow(-1)

获取与初始数据帧的每一行相关联的value_counts,并用*

替换您的设置步骤
.insertRow(0)

创建一个只有较长单词的字段,然后您可以跟进

vc = data.merge(data['event_name'].value_counts().reset_index(),
                left_on='event_name', right_on='index', how='left')

为每组匹配的较长单词确定最常用的值,并使用

vc['long words'] = vc['event_name'].str.replace('\s\S\S?\s|\A\S\S?\s|\s\S\S?\z',
                                                ' ').str.strip()

将这些匹配到每一行,由于索引保持不变,因此可以使用

进行分配
vc_max = vc.sort_values('event_name_y', ascending=False).drop_duplicates('long words')

*如果你想坚持列表/不喜欢正则表达式,下面也可以使用

vc.merge(vc_max, on='long words', how='left')