代码之家  ›  专栏  ›  技术社区  ›  Abob

计算pandas python中每个单元格/行中的行数

  •  2
  • Abob  · 技术社区  · 8 年前

    我要计算一个单元格中数据帧行中特定列的唯一行/条目数。理想情况下,我需要每行中唯一行/条目的数量。在下面的示例中,我以逗号分隔的形式说明了这些条目,但是在我的数据中,每个条目都位于新行(不带逗号):

    例如,如果我有这样的数据帧:

    ID            A            B
    1           1,2,1,2      1,2,3,4
    2           1,2,3,4      1,2,1,2
    3           1,2,3        3,4
    4           4,1       
    

    预期结果应与此类似:

    ID            A            B           countA         countB 
    1           1,2,1,2      1,2,3,4         2               4
    2           1,2,3,4      1,2,1,2         4               2
    3           1,2,3        3,4             3               2
    4           4,1                          1               0
    

    任何想法都非常感谢我看过groupby,独特和大小,但是这只适用于唯一的行,而不是行内的条目。希望我的解释足够清楚,提前谢谢你的帮助。

    2 回复  |  直到 8 年前
        1
  •  2
  •   jezrael    8 年前

    iloc applymap set

    #if missing values are NaNs
    df1 = df.iloc[:, 1:].applymap(lambda x: len(set(x.split(','))) if isinstance(x, str) else 0)
    
    #if missing values are empty strings
    df1 = df.iloc[:, 1:].applymap(lambda x: len(set(x.split(','))) if x != '' else 0)
    

    join DataFrame add_prefix

    df = df.join(df1.add_prefix('Count'))
    print (df)
       ID        A        B  CountA  CountB
    0   1  1,2,1,2  1,2,3,4       2       4
    1   2  1,2,3,4  1,2,1,2       4       2
    2   3    1,2,3      3,4       3       2
    3   4      4,1      NaN       2       0
    
        2
  •  1
  •   jpp    8 年前

    filter(None, ...)

    def counter(x):
        return [len(set(filter(None, i.split(',')))) for i in x]
    
    for col in ['A', 'B']:
        df['count'+col] = counter(df[col])
    
    print(df)
    
       ID        A        B  countA  countB
    0   1  1,2,1,2  1,2,3,4       2       4
    1   2  1,2,3,4  1,2,1,2       4       2
    2   3    1,2,3      3,4       3       2
    3   4      4,1                2       0