''数据帧类似
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.agg
与DataFrame.idxmax
和DataFrame.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