[英]how to count number of lines, within a cell in pandas dataframe, which are not empty lines
[英]Count number of lines in a cell/row in pandas python
我正在计算一个数据框行中特定列的单元格中唯一行/条目的数量。 理想情况下,我希望计算每行中唯一行/条目的数量。 在下面的示例中,我以逗号分隔的形式说明了这些条目,但是在我的数据中,每个条目都在换行符上(没有逗号):
例如,如果我有一个像这样的数据框:
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的任何想法都值得赞赏,但这仅适用于唯一行,而不适用于行内的条目。 希望我的解释很清楚,在此先感谢您的协助。
使用iloc
忽略第一行,并通过applymap
的值的applymap
值set
的长度,通过applymap
唯一值逐个计数:
#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
您可以使用列表推导。 请注意,通过熊猫无法实现矢量化方法,因此,如果性能很重要,则应测试不同的解决方案。
下面我们使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.