问题描述
我需要在每种情况下的一系列列中计算某个值的出现次数(假设为 3 )。为此,我编写了如下脚本:
import pandas as pd
import numpy as np
objsourcedf = pd.DataFrame({"a": [1,2,2],"b": [3,1,1],"c": [3,"d": [4,3,8]})
print(objsourcedf)
objauxdf = objsourcedf.transpose()
objauxdf.loc["counts"] = np.sum(objauxdf == 3)
objsourcedf = objsourcedf.assign(counts=list(objauxdf.loc["counts"]))
print(objsourcedf)
第一个print
是:
a b c d
0 1 3 3 4
1 2 1 2 3
2 2 1 1 8
第二:
a b c d counts
0 1 3 3 4 2
1 2 1 2 3 1
2 2 1 1 8 0
即使它工作正常,我也可以肯定有更多的Python方式可以做到这一点。 “ pythonic”是指使用简洁的本机pandas
功能,并且不会在列/行之间循环。例如,在SPSS中,有一个简单的count
命令,因此对于此objsourcedf
,此行应为:
count counts = a b c d (3).
execute.
可悲的是,作为Python和pandas
的初学者,我什么都找不到,所以我问你是否有更简单的方法来发生事件?
解决方法
我希望这符合“ Pythonic”的要求:
objsourcedf['count'] = objsourcedf.eq(3).sum(axis=1)