如何计算列表中元素的数量并创建新列?

时间:2019-04-28 08:41:41

标签: python python-3.x pandas

我的df如下:

   Col1                                           Col2
    0                                     [7306914, 7306915]
    1                                     [7295911, 7295912]
    2                                              [7324496]
    3                                     [7294109, 7294110]
    4                                              [7313713]

第二列是一个列表。 我想要创建一个新列,其中包含列表中元素的总数

预期输出:

   Col1        Col2           Col3
    0    [7306914, 7306915]      2
    1    [7295911, 7295912]      2
    2    [7324496]               1
    3    [7294109, 7294110]      2
    4    [7313713]               1

3 个答案:

答案 0 :(得分:4)

使用Series.str.len。这是一种向量化方法,比apply函数更有效,后者实际上是looping的内幕:

df = pd.DataFrame([{'Col1': 0, 'Col2': [7306914, 7306915]}, {'Col1': 1, 'Col2': [7295911, 7295912]}, {'Col1': 2, 'Col2': [7324496]}, {'Col1': 3, 'Col2': [7294109, 7294110]}, {'Col1': 4, 'Col2': [7313713]}])

df['Col3'] = df['Col2'].str.len()

[出]

print(df)

   Col1                Col2  Col3
0     0  [7306914, 7306915]     2
1     1  [7295911, 7295912]     2
2     2           [7324496]     1
3     3  [7294109, 7294110]     2
4     4           [7313713]     1

答案 1 :(得分:2)

尝试一下:

df_tmp = pd.DataFrame({'col1':[[1,2,3], [1,2]]}).reset_index()
In [360]:

df_tmp.head()
Out[360]:
    index   col1
0   0       [1, 2, 3]
1   1       [1, 2]
In [364]:

df_tmp['len'] = df_tmp.apply(lambda x: len(x['col1']), axis=1)
In [365]:

df_tmp
Out[365]:
    index   col1        len
0   0       [1, 2, 3]   3
1   1       [1, 2]      2

应用应该是最快的方法。

答案 2 :(得分:0)

像这样使用DataFrame.apply()DataFrame.apply()

df['Col3'] = df['Col2'].apply(len)

希望它可以为您提供帮助。