有没有办法按数据分组

时间:2019-03-15 14:58:03

标签: python pandas pandas-groupby

在按条件应用分组后,我想取消对数据框的分组。 我用pandas group by&sum来分组。以下是表格分组

+------------+--------------+----------------+-----------------+
|   Month    | Amt_8_red_17 | Amt_8_black_29 | Amt_10_black_29 |
+------------+--------------+----------------+-----------------+
| 01-01-2018 |            0 |             12 |              18 |
| 01-02-2018 |          100 |             12 |              12 |
+------------+--------------+----------------+-----------------+

现在我要取消数据分组。列名称是由下划线连接的列的组合。 例如:Amt_8_red_17:列名是(Amount,Count,Color,Id) 输出看起来像

+------------+---------+-------+-------+----+
|   Month    | Amount  | Count | Color | Id |
+------------+---------+-------+-------+----+
| 01-01-2018 |       0 |     8 | red   | 17 |
| 01-01-2018 |      12 |     8 | black | 29 |
| 01-01-2018 |      18 |    10 | black | 29 |
| 01-02-2018 |     100 |     8 | red   | 17 |
| 01-02-2018 |      12 |     8 | black | 29 |
| 01-02-2018 |      12 |    10 | black | 29 |
+------------+---------+-------+-------+----+

有没有更快的方法?

1 个答案:

答案 0 :(得分:3)

如有必要,首先按DataFrame.set_index的所有列创建索引,不包括base64

然后通过str.split创建_并通过DataFrame.unstack重塑形状。

最后一次数据清理-首先删除DataFrame.reset_index的第一级,第二删除MultiIndex中的列。最后设置新的列名称。

MultiIndex

最后必要时更改订单列:

df = df.set_index('Month')
df.columns = df.columns.str.split('_', expand=True)
df = df.unstack().reset_index(level=0, drop=True).reset_index()
df.columns= ['Count','Color','Id','Month','Amount']
print (df)
  Count  Color  Id       Month  Amount
0     8    red  17  01-01-2018       0
1     8    red  17  01-02-2018     100
2     8  black  29  01-01-2018      12
3     8  black  29  01-02-2018      12
4    10  black  29  01-01-2018      18
5    10  black  29  01-02-2018      12