我是使用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字符串以匹配。
答案 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')