列在熊猫数据框中的行
问题描述:
我想使用几个列作为行ID,同时根据时间进行分组计数。 看下面说明:列在熊猫数据框中的行
X Y Z Time
0 1 2 10
0 2 3 10
1 0 2 15
1 0 0 23
变换成这样:
Category Count Time
X 0 10
X 1 15
X 1 23
Y 3 10
Y 0 15
Y 0 23
Z 5 10
Z 2 15
Z 0 23
正在发生的事情是,X发生0次的时间但1次15和23 。
Y出现3次'时钟但没有在15和23。等
答
我认为你需要melt
与groupby
由Category
列聚集sum
和最后sort_values
:
print pd.melt(df, id_vars='Time', var_name='Category', value_name='Count')
.groupby(['Time','Category']).sum().reset_index().sort_values('Category')
Time Category Count
0 10 X 0
3 15 X 1
6 23 X 1
1 10 Y 3
4 15 Y 0
7 23 Y 0
2 10 Z 5
5 15 Z 2
8 23 Z 0
与stack
另一种解决方案:
df1 = df.set_index('Time')
.stack()
.groupby(level=[0,1])
.sum()
.reset_index()
.sort_values('level_1')
df1.columns = ['Time','Category','Count']
df1 = df1[['Category','Count','Time']]
print df1
Category Count Time
0 X 0 10
3 X 1 15
6 X 1 23
1 Y 3 10
4 Y 0 15
7 Y 0 23
2 Z 5 10
5 Z 2 15
8 Z 0 23
+0
工作就像一个魅力。非常感谢! – Anonymous
@EdChum我认为这是成功的一半重复的,因为在这[回答](http://stackoverflow.com/questions/19842066/python-pandas-certain-columns-to-rows)不与总和汇总。所以我删除了重复。但是,如果您仍然认为它是重复的,请添加它。 – jezrael