我有3个可能的值(1、2、3)的数据框,如下所示
df = pd.DataFrame({"A": [1, 2], "B": [3, 3], "C": [2, 3], "D": [3, 2]})
有了这个数据框
A B C D
1 3 2 3
2 3 3 2
一个值到另一个值的计数是
第0行
1 -> 1 = 0 2 -> 1 = 0 3 -> 1 = 0
1 -> 2 = 0 2 -> 2 = 0 3 -> 2 = 1
1 -> 3 = 1 2 -> 3 = 1 3 -> 3 = 0
第1行
1 -> 1 = 0 2 -> 1 = 0 3 -> 1 = 0
1 -> 2 = 0 2 -> 2 = 0 3 -> 2 = 1
1 -> 3 = 0 2 -> 3 = 1 3 -> 3 = 1
然后,我将以下各项加起来
总
1 -> 1 = 0 2 -> 1 = 0 3 -> 1 = 0
1 -> 2 = 0 2 -> 2 = 0 3 -> 2 = 2
1 -> 3 = 1 2 -> 3 = 2 3 -> 3 = 1
我可以大致考虑如下的程序
步骤1:转置df
步骤2:对于转置df的每一列,通过移动给定列的1行来创建一个临时列
第三步:给定这样一个列,对这个列和一个临时列进行分组,然后计数
步骤4:所有计数之和
我认为可能有比这更有效的方法。请问您有什么建议吗?谢谢。
如果您愿意,这是一个替代解决方案:
tuple
于每对计算元组。
pd.concat([df, df.shift(axis=1)], keys=[1,2])\
.sort_index(level=1).dropna(axis=1).astype(int)\
.unstack().T.apply(tuple, axis=1).value_counts()
#(2, 3) 2
#(3, 2) 2
#(3, 3) 1
#(3, 1) 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句