我有以下DataFrame
:
KPI_01 KPI_02 KPI_03
date
2015-05-24 green green red
2015-06-24 orange red NaN
我想计算每个日期的颜色数量,以便获得:
value green orange red
date
2015-05-24 2 0 1
2015-06-24 0 1 1
这是我的代码,完成这项工作。有更好的方法(更短)吗?
# Test data
df= pd.DataFrame({'date': ['05-24-2015','06-24-2015'],
'KPI_01': ['green','orange'],
'KPI_02': ['green','red'],
'KPI_03': ['red',np.nan]
})
df.set_index('date', inplace=True)
# Transforming to long format
df.reset_index(inplace=True)
long = pd.melt(df, id_vars=['date'])
# Pivoting data
pivoted = pd.pivot_table(long, index='date', columns=['value'], aggfunc='count', fill_value=0)
# Dropping unnecessary level
pivoted.columns = pivoted.columns.droplevel()
答案 0 :(得分:1)
你可以apply
value_counts
:
>>> df.apply(pd.Series.value_counts,axis=1).fillna(0)
green orange red
date
05-24-2015 2 0 1
06-24-2015 0 1 1
apply
往往会很慢,并且行式操作也会变慢,但说实话,如果你的框架不是很大,你甚至可能都没有注意到差异。