答案 0 :(得分:1)
使用GroupBy.count
表示不包含NaN
的计数值,并通过DataFrame.stack
进行整形-输出为MultiIndex Series
:
s = df.groupby('ST').count().stack()
print (s)
ST
A NO 2
CO 1
B NO 2
CO 2
C NO 1
CO 1
dtype: int64
如果需要DataFrame
:
df1 = df.groupby('ST').count().stack().rename_axis(('ST','NEW')).reset_index(name='VAL')
print (df1)
ST NEW VAL
0 A NO 2
1 A CO 1
2 B NO 2
3 B CO 2
4 C NO 1
5 C CO 1
答案 1 :(得分:0)
df = pd.DataFrame(
{'ST': list('AABBBC'),
'NO': [5.3, 1.2, np.nan, 2.3, 4.2, 1.5],
'CO':[3.4,np.nan, 4.1, 2.5,np.nan, 3.6]})
您还可以结合使用melt和pivot_table函数,分两步执行此操作: 使用melt函数重新格式化数据框的形状
cols=['NO','CO']
df_melt=pd.melt(df,id_vars=['ST'],value_vars=cols)
然后使用数据透视表创建新的数据框并计算值
df_pivot=pd.pivot_table(df_melt,index=['ST','variable'],values='value',aggfunc='count').reset_index()
Result:
ST variable value
0 A CO 1
1 A NO 2
2 B CO 2
3 B NO 2
4 C CO 1
5 C NO 1