我已将一个csv导入到我的python代码中,如下所示:
df = pd.DataFrame({
50001:[np.nan,5,np.nan,5,5,np.nan],
50002:[np.nan,np.nan,9,np.nan,np.nan,3],
50003:[np.nan,3,5,np.nan,1,np.nan],
})
我希望我的数据看起来像这样:
我已经为此编写了代码,但是我只得到分数和价值计数。我无法获取rule_id列。这是我正在使用的代码:
for i in dframe:
dframe1 = dframe.loc[: , i].value_counts()
print(dframe1)
这给我的结果是:
如果您能帮助我解决这个问题,我将不胜感激。
答案 0 :(得分:2)
将DataFrame.melt
与SeriesGroupBy.value_counts
或GroupBy.size
结合使用:
df = (df.melt(var_name='Rule_ID', value_name='Score')
.groupby('Rule_ID')['Score']
.value_counts()
.reset_index(name='Value_Count'))
print (df)
Rule_ID Score Value_Count
0 50001 5.0 3
1 50002 3.0 1
2 50002 9.0 1
3 50003 1.0 1
4 50003 3.0 1
5 50003 5.0 1
或者:
df = (df.melt(var_name='Rule_ID', value_name='Score')
.groupby(['Rule_ID', 'Score'])
.size()
.reset_index(name='Value_Count'))