我正在计算数据帧行中特定列的单元格中唯一行/条目的数量。理想情况下,我希望计算每行中唯一行/条目的数量。在下面的示例中,我将条目说明为逗号分隔但是在我的数据中,每个条目都在一个新行上(没有逗号):
例如,如果我有这样的数据框:
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,但是这仅适用于唯一行而不是行内的条目。希望我的解释很清楚,提前感谢任何帮助。
答案 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
到原始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
答案 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, ...)