pandas数据框中的列到行

时间:2016-04-26 09:03:06

标签: python pandas dataframe

我想使用几列作为行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 10 时出现0次,对于 15和23 出现1次。
Y 10 时出现3次,但在 15和23 时出现 。等

1 个答案:

答案 0 :(得分:2)

我认为您需要melt groupby聚合sum,最后sort_valuesCategory列:

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