给出了n列的数据帧,我想计算每列中特定数字的频率

  • 本文关键字:频率 计算 数字 数据帧 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+0+4

0+0、0+4、0+4和0+0+4

计数3计数5计数6计数7。

计数a列1,b列2,a+b列3,c列4,a+c列5,b+c列6,a+b+c行7。像这样

将所有这些值/数字存储在列表、数组或类似的数据帧中

数值/编号、标题、频率

1、a、2

2,b,2

3,a+b,1

4、c、3

5,a+c,2

6,b+c,1

7,a+b+c,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

然后DataFrame.aggDataFrame.idxmaxDataFrame.max用于新的DataFrame,DataFrame.reset_index用于索引中的列和最后的rename列:

c = {'index':'Values/Number','idxmax':'Title','max':'Frequency'}
df2 = df1.agg(['idxmax','max'], axis=1).reset_index().rename(columns=c)
print (df2)
Values/Number  Title Frequency
0              0      a         2
1              1      a         2
2              2      b         2
3              3    a+b         1
4              4      c         3
5              5    a+c         2
6              6    b+c         1
7              7  a+b+c         1

最新更新