我在 csv 文件的单列中有以下形式的数据。
['hhcb', 'hcbc', 'cbcc', 'bccc', 'cccd', 'ccdd', 'cddh']
['fahb', 'ahba', 'hbac', 'bacc']
['hchc', 'chcb', 'hcbh']
['hhhh', 'hhhh', 'hhhc', 'hhcd', 'hcdc', 'cdcc']
['habb', 'abbb', 'bbbb', 'bbbc', 'bbcc', 'bccd', 'ccdh', 'cdhd']
我必须在此数据中找到出现次数最多的四长度字符串。 请建议方法。 (是例子,原始数据很大)
请您参考如下方法:
你可以试试apply Series 用于创建 DataFrame,然后是 stack和 value_counts .最后一个可能的过滤器最高值是 head或 [:5]:
print df
a
0 [hhcb, hcbc, cbcc, bccc, cccd, ccdd, cddh]
1 [fahb, ahba, hbac, bacc]
2 [hchc, chcb, hcbh]
3 [hhhh, hhhh, hhhc, hhcd, hcdc, cdcc]
4 [habb, abbb, bbbb, bbbc, bbcc, bccd, ccdh, cdhd]
print df.a.apply(pd.Series).stack().value_counts()[:1]
hhhh 2
dtype: int64
编辑:
如果您需要前 5 并在每行中删除重复项,请使用 drop_duplicates :
print df
a
0 [hhcb, hhcb, cbcc, bccc, bbbb, hhcb, hhcb]
1 [fahb, ahba, hhcd, fahb]
2 [hcbh, hhcd, hcbh]
3 [hhhh, hhhh, hhhc, hhcd, hhcb, bbbb]
4 [habb, habb, bbbb, bbbc, cbcc, bccd, ccdh, cdhd]
df1 = df.a.apply(pd.Series)
.stack()
.groupby(level=0)
.apply(lambda x: x.drop_duplicates())
.value_counts()[:5]
print df1
bbbb 3
hhcd 3
hhcb 2
cbcc 2
habb 1
dtype: int64
