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。像这样。谢谢,请多加一份。谢谢,请多加一份