【发布时间】:2021-02-07 12:49:09
【问题描述】:
从这里开始:unique combinations of values in selected columns in pandas data frame and count
我发现使用此代码的 3 列出现次数最多到最少的组合:
def common_cols(df,n):
'''n is how many of the top results to show'''
df = df.groupby(['A','B','C']).size().reset_index().rename(columns={0:'count'})
df = df.sort_values(by='count', ascending=False).reset_index(drop=True).head(n)
return df
common_data = common_cols(df,10)
common_data 的输出(显示前 10 个结果):
A B C count
0 0.00 0.00 0.00 96
1 0.00 1.00 0.00 25
2 0.14 0.86 0.00 19
3 0.13 0.87 0.00 17
4 0.00 0.72 0.28 17
5 0.00 0.89 0.11 16
6 0.01 0.84 0.15 16
7 0.03 0.97 0.00 15
8 0.35 0.65 0.00 15
9 0.13 0.79 0.08 14
现在,我想找出 A B C 行的组合,并计算它们出现了多少次。
例如,让我们在第 1 行到第 4 行的 BASE df 中说:
3 列的第一组组合(在使用 common_cols 函数之前由 dataframe(df) 告知)是
# each of these rows are their own combination of values
A B C
0 0.67 0.16 0.17
1 0.06 0.73 0.20
2 0.19 0.48 0.33
3 0.07 0.87 0.06
4 0.07 0.60 0.33
以上 5 行(按顺序)将被计为一个组合模式。它可以算作 2 行、3 行、4 行或更多行的组合(如果这样做很容易的话!)
如果这个模式被找到一次(在整个数据帧中),它会输出这个模式的计数为 1。如果它被找到 10 次;计数将是 10。
关于如何计算连续行之间的组合有什么想法吗? 就像使用 common_cols 函数一样,但是作为“组合的组合”?
行必须是为了使它成为一个模式。非常感谢任何帮助!
【问题讨论】:
-
我不确定这是否是正确的方法,但可能会有所帮助:您可以(迭代地)将列添加到包含下 N 行值列表的每一行。例如,第 0 行的 N_5 列包含 [row0, row1, row2, row3, row4]。然后,对于这些列中的每一列,您可以将所有这些列与其各自的计数列连接起来,并按函数进行分组。这有意义吗?
-
你在计算 a,b,c 值的频率吗?如果是这样,一个组和大小应该可以工作。你还需要什么?
-
@JarroVGIT 我不确定,尤其是因为这是我第一次使用 groupby。感谢您的帮助和想法:)。 Rick M 的答案似乎是一个可行的解决方案
-
@GoldenLion 问题是关于计算发现连续模式的次数。例如,如果在数据集中找到数字(按顺序):0.5、0.25、0.25 和 0.2、0.8、0.0 多次,我正在寻找这样的模式
-
使用 value_counts 或 Counter 获取组合或 groupby 大小的唯一计数
标签: python pandas dataframe combinations permutation