假设我有一个包含 N
列的数据框(例如 N=3
)。每行代表一个样本:
A B C
sample_1 64 46 69
sample_2 55 33 40
sample_3 67 51 78
sample_4 97 32 62
sample_5 50 36 39
我想知道 A
、B
、C
列的最常见的顺序是什么跨行。
在上面的例子中,可以手动对每一行进行排序:
sample_1: [B, A, C]
sample_2: [B, C, A]
sample_3: [B, A, C]
sample_4: [B, C, A]
sample_5: [B, C, A]
然后发现最常见的排序是[B, C, A]
,而[B, A, C]
是第二常见的。
Pandas、scipy 或 statsmodels 中是否有任何有助于此分析的函数?例如,如果我想了解每个订单发生的频率怎么办?
最佳答案
也许:
>>> from collections import Counter
>>> f = lambda ts: df.columns[np.argsort(ts).values]
>>> Counter(map(tuple, df.apply(f, axis=1).values))
Counter({('B', 'C', 'A'): 3, ('B', 'A', 'C'): 2})
所以最常见的顺序是:
>>> _.most_common(1)
[(('B', 'C', 'A'), 3)]
或者:
>>> f = lambda ts: tuple(df.columns[np.argsort(ts)])
>>> df.apply(f, axis=1, raw=True).value_counts()
(B, C, A) 3
(B, A, C) 2
dtype: int64
关于pandas - 列排序统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25437773/