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

时间:2018-06-09 17:38:21

标签: python pandas csv dataframe

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

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

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,unique和size,但是这仅适用于唯一行而不是行内的条目。希望我的解释很清楚,提前感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

使用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到原始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

答案 1 :(得分:1)

您可以使用列表理解。请注意,通过Pandas无法实现矢量化方法,因此如果性能很重要,则应测试不同的解决方案。

下面我们使用print (df_1['KEY_PLA'].dtype) object print (df_2['KEY_PLA'].dtype) int64 df_1['KEY_PLA'] = df_1['KEY_PLA'].astype(int) 来避免计算空字符串。

filter(None, ...)