计算多列中的值

时间:2015-10-15 09:11:01

标签: python pandas dataframe

我有以下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()

1 个答案:

答案 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往往会很慢,并且行式操作也会变慢,但说实话,如果你的框架不是很大,你甚至可能都没有注意到差异。