熊猫:如何返回字符串列的字符串长度计数?

时间:2019-09-05 01:24:02

标签: python pandas dataframe

说我有一个数据框df

import pandas as pd
df = pd.DataFrame({"id":["a", "b", "aa", "aaa", "bbb", "a"]})

在这种情况下,我想计算列id的字符串长度的计数

在此示例中,id中有3个字符串,其长度为1,长度为2的字符串为1,长度为2的字符串,因此,我想拥有一个反映该信息的表

str_length  count
1           3
2           1
3           2

对数百万行执行此操作的最有效方法是什么?

这是我能想到的最好的方法,但是我听说使用apply很慢

df_count = df.id.apply(lambda x: len(x)).value_counts()
df_count2 = pd.DataFrame({"str_length": df_count.index.tolist(), "count": df_count})
df_count2.sort_values("str_length")

产生。

   str_length  count
1           1      3
2           2      1
3           3      2

4 个答案:

答案 0 :(得分:3)

您在这里

df.id.str.len().value_counts()
1    3
3    2
2    1
Name: id, dtype: int64

答案 1 :(得分:1)

使用分组依据进行计数。

(
    df.groupby(by=df.id.apply(len))
    .id.count()
    .to_frame('count')
    .rename_axis(index='str_length')
    .reset_index()
)

    str_length  count
0   1           3
1   2           1
2   3           2

答案 2 :(得分:1)

numpy解决方案:

np.transpose(np.unique(df.id.map(len), return_counts=True))

Out[229]:
array([[1, 3],
       [2, 1],
       [3, 2]], dtype=int64)

创建DataFrame

pd.DataFrame(np.transpose(np.unique(df.id.map(len), return_counts=True)), 
             columns=['str_length', 'count'])

Out[231]:
   str_length  count
0           1      3
1           2      1
2           3      2

答案 3 :(得分:0)

或者,如果性能不是问题,我们可以使用

df.id.groupby(lambda x: len(df.id[x])).size()

df.id.groupby(df.id.apply(len)).size()