Python 我们有一个n列的数据帧。并且要计算每列中特定数字的频率

Python 我们有一个n列的数据帧。并且要计算每列中特定数字的频率,python,pandas,Python,Pandas,数据帧就像 1 2 4 ....n 0 2 0 ....n 1 0 4 ....n 0 0 4 ....n 现在我想从第1列开始计数1,从第2列开始计数2,从第3列开始计数4,依此类推 但我也希望通过添加列来计算一些值,如 1+2 , 1+4 , 2+4 , 1+2+4 0+2 , 0+0 , 2+0 , 0+2+0 1+0 , 1+4 , 0+4 ,

数据帧就像

1  2  4  ....n

0  2  0  ....n

1  0  4  ....n

0  0  4  ....n
现在我想从第1列开始计数1,从第2列开始计数2,从第3列开始计数4,依此类推

但我也希望通过添加列来计算一些值,如

1+2  ,        1+4     ,    2+4   ,   1+2+4

0+2  ,        0+0     ,    2+0   ,   0+2+0

1+0  ,         1+4    ,     0+4  ,    1+0+4

0+0  ,         0+4    ,     0+4  ,    0+0+4
计数3计数5计数6计数7分别来自上述列

在列表、数组或类似数据帧中记录这些值/数字

Values/Number -- Frequency

1 , 2

2 , 2

3 , 1

4 , 3

5 , 2

6 , 1

7 , 1

我相信你需要:

from itertools import chain, combinations
#https://stackoverflow.com/a/5898031
comb = chain(*map(lambda x: combinations(df.columns, x), range(2, len(df.columns)+1)))

cols = df.columns
for c in comb:
    df[f'{"+".join(c)}'] = df.loc[:, c].sum(axis=1)
print (df)
   a  b  c  a+b  a+c  b+c  a+b+c
0  1  2  4    3    5    6      7
1  0  2  0    2    0    2      2
2  1  0  4    1    5    4      5
3  0  0  4    0    4    4      4
然后可以对每列进行计数,数据框中的值为计数,索引值为计数数:

df1 = df.apply(pd.value_counts)
print (df1)
     a    b    c  a+b  a+c  b+c  a+b+c
0  2.0  2.0  1.0  1.0  1.0  NaN    NaN
1  2.0  NaN  NaN  1.0  NaN  NaN    NaN
2  NaN  2.0  NaN  1.0  NaN  1.0    1.0
3  NaN  NaN  NaN  1.0  NaN  NaN    NaN
4  NaN  NaN  3.0  NaN  1.0  2.0    1.0
5  NaN  NaN  NaN  NaN  2.0  NaN    1.0
6  NaN  NaN  NaN  NaN  NaN  1.0    NaN
7  NaN  NaN  NaN  NaN  NaN  NaN    1.0
如果希望每行的最大计数,请使用:

df2 = df1.max(axis=1).astype(int).rename_axis('Num').reset_index(name='count')
print (df2)
   Num  count
0    0      2
1    1      2
2    2      2
3    3      1
4    4      3
5    5      2
6    6      1
7    7      1
我相信你需要:

from itertools import chain, combinations
#https://stackoverflow.com/a/5898031
comb = chain(*map(lambda x: combinations(df.columns, x), range(2, len(df.columns)+1)))

cols = df.columns
for c in comb:
    df[f'{"+".join(c)}'] = df.loc[:, c].sum(axis=1)
print (df)
   a  b  c  a+b  a+c  b+c  a+b+c
0  1  2  4    3    5    6      7
1  0  2  0    2    0    2      2
2  1  0  4    1    5    4      5
3  0  0  4    0    4    4      4
然后可以对每列进行计数,数据框中的值为计数,索引值为计数数:

df1 = df.apply(pd.value_counts)
print (df1)
     a    b    c  a+b  a+c  b+c  a+b+c
0  2.0  2.0  1.0  1.0  1.0  NaN    NaN
1  2.0  NaN  NaN  1.0  NaN  NaN    NaN
2  NaN  2.0  NaN  1.0  NaN  1.0    1.0
3  NaN  NaN  NaN  1.0  NaN  NaN    NaN
4  NaN  NaN  3.0  NaN  1.0  2.0    1.0
5  NaN  NaN  NaN  NaN  2.0  NaN    1.0
6  NaN  NaN  NaN  NaN  NaN  1.0    NaN
7  NaN  NaN  NaN  NaN  NaN  NaN    1.0
如果希望每行的最大计数,请使用:

df2 = df1.max(axis=1).astype(int).rename_axis('Num').reset_index(name='count')
print (df2)
   Num  count
0    0      2
1    1      2
2    2      2
3    3      1
4    4      3
5    5      2
6    6      1
7    7      1

请编辑您的问题必须统计哪些列?只有原创的吗?还是新的?还是全部?从a列中计算1,从b列中计算2,从a+b列中计算3,从c列中计算4,从a+c列中计算5,从b+c列中计算6,从a+b+c列中计算7。像这样。请编辑您的问题什么列必须计数?只有原创的吗?还是新的?还是全部?从a列中计算1,从b列中计算2,从a+b列中计算3,从c列中计算4,从a+c列中计算5,从b+c列中计算6,从a+b+c列中计算7。像这样。谢谢,请多加一份。谢谢,请多加一份