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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (411)

我正在计算数据框行中特定列的单元格中唯一行/条目的数量。理想情况下,我希望计算每行中唯一行/条目的数量。在下面的例子中,我用逗号分隔了条目,但是在我的数据中,每个条目都在一个新行中(没有逗号):

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

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
提问于
用户回答回答于

使用iloc的省略第一行和通过的elementwise数applymap由长度唯一值set分裂值S:

#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到原来DataFrameadd_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
用户回答回答于
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

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动