【问题标题】:Column to row in pandas dataframe熊猫数据框中的列到行
【发布时间】:2016-08-20 00:02:31
【问题描述】:

我想在计算基于时间的分组时使用几列作为行 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 次。
Y10'clock 出现 3 次,但在 15 和 23 没有出现。等等

【问题讨论】:

  • @EdChum 我认为它是重复的,因为在此answer 没有与总和聚合。所以我删除了重复。但如果您仍然认为它是重复的,请添加它。

标签: python pandas dataframe


【解决方案1】:

我认为你需要 meltgroupby 聚合 sum 和最后一个 sort_values 按列 Category

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

【讨论】:

  • 工作就像一个魅力。非常感谢!
猜你喜欢
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多